0

我有一个自动生成它的列的 DataGrid。

在代码中,我实现了 AutoGeneratingColumn 事件,为我的翻译数据类型设置了某个模板:

    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 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 属性。如果要显示的对象具有名称属性,则可以正常工作。但是,如果我有未命名为“名称”的翻译属性,显然不会显示任何数据。我将如何正确绑定以涵盖所有翻译项目。

4

2 回答 2

0

创建一个DataTemplateSelector可以DataTemplate为您当前的翻译类选择正确的位置并将其添加到您的TextBlock.Text绑定中。查看更多

于 2012-10-18T07:45:58.283 回答
0

因为它看起来像单向绑定,所以用转换器做一个简单的绑定:

TextBlock Text="{Binding Converter={StaticResource your_converter}}" ...

并在转换器中实现您的逻辑。如果要绑定的 ViewModel 不一致,这是最简单的方法。

于 2012-10-18T08:06:20.113 回答