我在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>
答案 0 :(得分:0)
ViewModel应该反映在View
中,因此您最好的做法就是向Name
ViewModel
属性
但是,由于您在comment中说过您的ViewModel
是在固定数据合同中定义的,因此您可以使用Converter
将Id
转换为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>