gpt4 book ai didi

wpf - wpf数据网格中的绑定(bind)组合框

转载 作者:行者123 更新时间:2023-12-03 11:00:53 26 4
gpt4 key购买 nike

我有一个列表,我在我的 View 模型的初始化中填充:

ListOfEmployees = new List<EmployeeBO>(employeeRepository.GetEmployees(true, true));

我正在尝试在数据网格中获取一个组合框以从此列表中填充。
<DataGridTemplateColumn Header="U/M" MinWidth="145">
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox Name="cboUnitMeasure"
ItemsSource="{Binding Path=ListOfUnitMeasures}"
DisplayMemberPath="UnitMeasureDescription" SelectedValuePath="UnitMeasureValue"
SelectedValue="{Binding UnitMeasureValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
HorizontalAlignment="Left" Width="140" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding UnitMeasureDescription}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

当 dg 加载时,单元格模板显示 UnitMeasureDescription 值,但是当我单击单元格进行编辑时,组合框中没有任何项目。另一方面,当我使用 xml 文件中的静态资源作为 itemsource(使用相同的属性名称)时,组合框包含以下项目:
<DataGridTemplateColumn Header="U/M" MinWidth="145">
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox Name="cboUnitMeasure"
ItemsSource="{Binding Source={StaticResource UnitMeasureData}}"
DisplayMemberPath="UnitMeasureDescription" SelectedValuePath="UnitMeasureValue"
SelectedValue="{Binding UnitMeasureValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
HorizontalAlignment="Left" Width="140" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding UnitMeasureDescription}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

我在我的虚拟机中填充 ListOfEmployees 之后放置了一个断点,它包含项目。我还验证了 DisplayMemberPath 和 SelectedValuePath 中的属性名称是否正确。不知道我在这里做错了什么。

最佳答案

“ListOfUnitMeasures”是 VM 上的属性还是 EmployeeBO 的属性?好的,假设 DataGrid 的 ItemsSource 设置为 List<EmployeeBO>并且 VM 上有另一个名为“ListUnitOfMeasures”的列表,这是我的解释:

DataGrid 中每一行的 DataContext 将等于 DataGrid 的 ItemsSource 中的元素。在您的情况下,每一行都将使用 EmployeeBO 作为其 DataContext。由于“ListOfUnitMeasures”不是 Employee BO 的属性,ComboBox 上的绑定(bind)将不起作用,因此不会显示任何内容。

一种可能的解决方案是将 ComboBox 上的 Binding 更改为使用指向父 DataGrid 的 RelativeSource,如下所示:

<ComboBox Name="cboUnitMeasure" 
ItemsSource="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=DataContext.ListOfUnitMeasures}"/>

关于wpf - wpf数据网格中的绑定(bind)组合框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3416147/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com