#silverlight #datagrid #datagridtemplatecolumn
#silverlight #datagrid #datagridtemplatecolumn
Вопрос:
У меня есть форма, в ней есть сетка.
Я автоматически создаю столбцы и изменяю их по мере необходимости:
if (e.PropertyName == "id")
{
System.Windows.Style style = new Style(typeof(DataGridCell));
style.Setters.Add(new Setter(DataGridCell.ContentTemplateProperty, CreateBtnTemplate(30)));
e.Column.CellStyle = style;
}
private static DataTemplate CreateBtnTemplate(int width)
{
string str = "<DataTemplate xmlns='http://schemas.microsoft.com/client/2007' >"
// "<Button Tag='{Binding id}' Content='Respond'
"<Button Tag='{Binding id}' Content='Respond' "
"Visibility='{Binding id, Converter={StaticResource myConverter}}'"
" />"
"</DataTemplate>";
return (DataTemplate)XamlReader.Load(str);
}
На моих страницах xaml у меня есть:
<Grid x:Name="LayoutRoot" Margin="0,0,4,0">
<Grid.Resources>
<my:EnableDisableConverter x:Name="myConverter" x:Key="myConverter"></my:EnableDisableConverter>
</Grid.Resources>
Мой класс выглядит следующим образом:
public class EnableDisableConverter : IValueConverter
{
object IValueConverter.Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Service1failedbackups f = value as Service1failedbackups;
if (f.resolution == null || f.resolution == "")
return System.Windows.Visibility.Visible;
else
return System.Windows.Visibility.Collapsed;
}
object IValueConverter.ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{ return null;
}
}
Короче говоря, если содержимое «разрешение» пустое, мне нужна кнопка, чтобы я мог заполнить ее через всплывающее окно.
Теперь все это компилируется, все выглядит хорошо. (my определяется как
xmlns:my="clr-namespace:SilverlightApplication1"
как часть заголовка страницы.
Ошибка, которую я получаю, это:
Error: Unhandled Error in Silverlight Application
Code: 2272
Category: ParserError
Message: Cannot find a Resource with the Name/Key myConverter
File:
Line: 1
Position: 121
Теперь все в порядке, пока я не добавлю часть видимости моего btnTemplate. Я специально использовал столбец ID, потому что мне не нужно, чтобы пользователи его видели.
Пожалуйста, кто-нибудь может сказать мне, что я пропустил. Это сводит меня с ума.
Ответ №1:
Я исправил это
Вот как.
в моем файле xaml я добавил
xmlns:converter="clr-namespace:SilverlightApplication1"
и затем в разделе сетка я добавил
<converter:EnableDisableConverter x:Name="myConverter" x:Key="myConverter" />
<DataTemplate x:Key="DataTemplate" >
<Button Visibility='{Binding Converter={StaticResource myConverter}}' Content='Respond' Click="btnRespond_Click" />
</DataTemplate>
<DataTemplate x:Key="err" >
<TextBlock Text='{Binding err}' FontSize='8' TextWrapping='Wrap'/>
</DataTemplate>
<DataTemplate x:Key="resolution" >
<TextBlock Text='{Binding resolution}' FontSize='8' TextWrapping='Wrap'/>
</DataTemplate>
</Grid.Resources>
Затем я отказался от всей автоматической генерации своих столбцов и установил
<sdk:DataGrid.Columns>
<sdk:DataGridTemplateColumn CellTemplate="{StaticResource DataTemplate}" Header="Action" Width="Auto" />
<sdk:DataGridTextColumn Binding="{Binding server}" Header="server" Width="Auto" />
<sdk:DataGridTextColumn Binding="{Binding software}" Header="software" Width="Auto" />
<sdk:DataGridTextColumn Binding="{Binding backupgroup}" Header="backupgroup" Width="Auto" />
<sdk:DataGridTemplateColumn CellTemplate="{StaticResource err}" Header="Action" Width="250" />
<sdk:DataGridTemplateColumn CellTemplate="{StaticResource resolution}" Header="Action" Width="150" />
<sdk:DataGridTextColumn Binding="{Binding resolver}" Header="resolver" Width="Auto" />
</sdk:DataGrid.Columns>
ТЕПЕРЬ это работает. ТЕПЕРЬ работает переключение..
ура