我有一个自动生成列的DataGrid。
在Code i中实现AutoGeneratingColumn事件,为我的Translation数据类型设置某个模板:
private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
if(e.PropertyType == typeof(Translation)){
DataGridTemplateColumn templateColumn = new DataGridTemplateColumn();
templateColumn.CellTemplate = (DataTemplate)Resources["LanguageTemplate"];
e.Column = templateColumn;
}
}
的DataTemplate:
<DataTemplate x:Key="LanguageTemplate">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="20"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Name.ActualTranslation}" HorizontalAlignment="Stretch" Grid.Column="0"></TextBlock>
<Image Source="{lex:LocImage en}" Height="15" HorizontalAlignment="Right" Grid.Column="1" Visibility="{Binding Name.HasCurrentLanguage, Converter={StaticResource boolToVis}, ConverterParameter=true}" ></Image>
</Grid>
</DataTemplate>
现在出现问题:TextBlock绑定到Name Property。如果要显示的对象具有名称属性,则工作正常。但是,如果我有没有命名为“名称”的翻译属性,显然没有显示数据。我将如何正确绑定以涵盖所有翻译项目。
答案 0 :(得分:0)
创建DataTemplateSelector
,可以为当前的翻译类选择正确的DataTemplate
,并将其添加到TextBlock.Text
绑定中。见more
答案 1 :(得分:0)
因为它看起来像单向绑定,所以用转换器做一个简单的绑定:
TextBlock Text="{Binding Converter={StaticResource your_converter}}" ...
并在转换器中实现您的逻辑。如果您想要绑定不一致的ViewModel,这是最简单的方法。