2

GridView 列に ComboBox の DataTemplate があります。セルが編集されているときは ComboBox を表示し、それ以外の場合は TextBlock を表示したいと考えています。ただし、TextBox に目的の値を表示するのに問題があります。

行の ViewModel には RegionId しかありませんが、Combo は Region オブジェクトのコレクション (Id と Name を含む) にバインドされています。値が編集されていないときに Region.Name を表示したいのですが、現時点では、ViewModel に Name プロパティが含まれていないため、RegionId を表示する方法しか見つかりません。

私は Telerik コンボボックスを使用していますが、これは単なるバインドの問題であると考えているため、標準の ComboBox コントロールでも問題は同じであると思います。

TextBlock を DataTemplate にバインドするにはどうすればよいですか?

<telerik:GridViewDataColumn>
<telerik:GridViewDataColumn.CellTemplate>
    <DataTemplate>
        <TextBlock Text="{Binding RegionId}" />  <!-- would like Region.Name -->
    </DataTemplate>
</telerik:GridViewDataColumn.CellTemplate>
<telerik:GridViewDataColumn.CellEditTemplate>
    <DataTemplate>
        <telerik:RadComboBox ItemsSource="{Binding Source={StaticResource regionView}}" 
            DisplayMemberPath="Name" SelectedValuePath="Id" SelectedValue="{Binding Path=RegionId, Mode=TwoWay}" />
    </DataTemplate>
</telerik:GridViewDataColumn.CellEditTemplate>
</telerik:GridViewDataColumn>
4

1 に答える 1

0

ViewModel は に反映されるはずなViewので、最善の方法は、Nameプロパティをに追加することです。ViewModel

しかし、コメントViewModelは固定データ コントラクトで定義されていると述べたので、代わりに a を使用してConverterを に変換できますIdName

コンバーター コードが のリストにアクセスできる場合は、 IValueConverterRegionsを使用するのが最も簡単です。

<TextBlock Text="{Binding RegionId, Converter={StaticResource MyRegionIdToNameConverter}}" />

ただし、そうでない場合は、IMultiValueConverterを使用して両方のパラメーターを渡す必要があります

<TextBlock.Text>
    <MultiBinding Converter="{StaticResource MyRegionIdToNameMultiConverter}">
        <Binding Source="{StaticResource regionView}"/>
        <Binding Path="RegionId" />
    </MultiBinding>
</TextBlock.Text>
于 2013-04-02T15:27:17.147 に答える