将ComboBox DataTemplate绑定到ItemSsource属性

时间:2013-04-02 11:29:34

标签: wpf data-binding mvvm combobox

我在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>

1 个答案:

答案 0 :(得分:0)

ViewModel应该反映在View中,因此您最好的做法就是向Name

添加ViewModel属性

但是,由于您在comment中说过您的ViewModel是在固定数据合同中定义的,因此您可以使用ConverterId转换为Name {1}}

如果您的转换器代码有权访问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>