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 プロパティにバインドされています。表示されるオブジェクトに Name プロパティがある場合、これは正常に機能します。しかし、「名前」という名前が付いていない翻訳プロパティがある場合、明らかにデータは表示されません。すべての翻訳アイテムをカバーするために正しくバインドするにはどうすればよいですか。

4

2 に答える 2

0

現在のTranslationクラスDataTemplateSelectorの権利を選択できる場所を作成し、それをバインディングに追加します。もっと見るDataTemplateTextBlock.Text

于 2012-10-18T07:45:58.283 に答える
0

一方向バインディングのように見えるので、 converter で簡単なバインディングを行います。

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

コンバーターにロジックを実装します。バインドする ViewModel に一貫性がない場合は、これが最も簡単な方法です。

于 2012-10-18T08:06:20.113 に答える