wpf - 将 ComboBox DataTemplate 绑定(bind)到 ItemSource 属性

标签 wpf data-binding mvvm combobox

我在 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转换 IdName
如果您的转换器代码可以访问列表 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/

相关文章:

wpf - WPF 中的负边距

c# - 动态更改 WPF 中网格的可见性

WPF Textbox Preview 事件相关

c# - 用 TextBox、MVVM C#​​ 编写的文本的数据验证

wpf - 旋转 Canvas 不应旋转其子 Canvas

javascript - 如何在服务中定义数组并在 AngularJS 中的 2 个 Controller 之间共享它

c# - .Net 图表将日期显示为一周中的几天

javascript - 绑定(bind)嵌套选择元素在 angularjs 中不起作用

java - 如何在 android 中使用数据绑定(bind)库绑定(bind)一个可以是 String 或 double 的变量?

c# - MVVM C#​​ 问题