我在 GridView 列中有一个 ComboBox 的 DataTemplate。我想在编辑单元格时显示一个 ComboBox ,否则显示一个 TextBlock 。但是,我无法让 TextBox 显示所需的值。
该行的 ViewModel 只有 RegionId,但 Combo 绑定(bind)到 Region 对象的集合(带有 Id 和 Name)。我想在未编辑值时显示 Region.Name ,目前我只能找到一种显示 RegionId 的方法,因为 ViewModel 不包含 Name 属性。
我正在使用 Telerik 组合框,但我认为我的问题与标准 ComboBox 控件相同,因为我认为这只是一个绑定(bind)问题。
我应该如何在 DataTemplate 中绑定(bind)我的 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>
最佳答案
ViewModel 应该反射(reflect)在 View
, 所以你最好的做法就是添加一个 Name
属性(property)到您的ViewModel
但既然你在 comment 中说你的ViewModel
在固定数据契约(Contract)中定义,您可以改为使用 Converter
转换 Id
到Name
如果您的转换器代码可以访问列表 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>
关于wpf - 将 ComboBox DataTemplate 绑定(bind)到 ItemSource 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15762957/