2

我在 GridView 列中有一个 ComboBox 的 DataTemplate。我想在编辑单元格时显示一个 ComboBox ,否则显示一个 TextBlock 。但是,我无法让 TextBox 显示所需的值。

该行的 ViewModel 只有 RegionId,但 Combo 绑定到 Region 对象的集合(带有 Id 和 Name)。我想在未编辑值时显示 Region.Name ,目前我只能找到一种显示 RegionId 的方法,因为 ViewModel 不包含 Name 属性。

我正在使用 Telerik 组合框,但我认为我的问题与标准 ComboBox 控件相同,因为我认为这只是一个绑定问题。

我应该如何在 DataTemplate 中绑定我的 TextBlock?

<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您可以改用 aConverterIdName

如果您的转换器代码可以访问 的列表Regions,那么使用IValueConverter是最简单的

<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 回答