c# - DataGridComboBoxColumn 不绑定回 UI
问题描述
我对 WPF 和 MVVM 还是很陌生。我将 DataGridComboBoxColumn 添加到 DataGrid。绑定到视图对象工作正常。但是,当我在保存组合框后重新打开屏幕时,不会显示以前保存的值(基本上从视图绑定回 UI 不起作用)。
以下是我正在尝试做的事情的想法:
以下三个类是我的视图类
ViewPosition 是我的数据网格中行的类类型(请参阅下面的 XAML)。ViewPosition 包含对 ViewPricing 的引用。ViewPricing 包含对 parentSecurity(字符串类型)的引用。安全性是包含描述属性的安全性。
public class ViewPosition : INotifyPropertyChanged
{
private long _securityID;
private long _portfolioID;
private DateTime _positionDate;
private ViewPricing viewPricing;
public ViewPricing Pricing
{
get { return viewPricing; }
set
{
viewPricing= value;
NotifyPropertyChanged();
}
}
}
public class ViewPricing : INotifyPropertyChanged
{
private String parentSecurity;
private decimal quantity;
private decimal price;
private decimal yield;
private decimal spread;
public string ParentSecurity
{
get { return parentSecurity; }
set
{
if (parentSecurity != value)
{
parentSecurity = value;
NotifyPropertyChanged("parentSecurity");
}
}
}
}
public class Security : INotifyPropertyChanged
{
public string Description { get; set; }
}
这是我的视图模型。这将获取所有可用证券的列表。
public class PositionViewModel : INotifyPropertyChanged
{
private List<Security> _securities;
private List<Security> _securities;
public List<Security> Securities
{
get { return _securities; }
set
{
if (_securities != value)
{
_securities = value;
NotifyPropertyChanged();
}
}
}
最后是我的 XAML。
- 我希望用户在组合框中看到安全描述。这就是我设置 DisplayMemberPath="Description" 的原因。
- 保存后,我希望将组合框值保存在 Pricing.ParentSecurity 中。这就是为什么我如下设置 SelectedValueBinding 和 SelectedValuePath 的原因。
证券列表正确显示组合框。与视图对象的绑定正在工作(组合框值保存到 Pricing.ParentSecurity)。我遇到的问题是从视图对象到 UI(组合框)的绑定不起作用。如果关闭然后重新打开我的窗口,那么组合框不会显示该值(它是空白的)。
<DataGrid.Columns>
<DataGridComboBoxColumn Header="Parent Security" SelectedValueBinding="{Binding Path=Pricing.ParentSecurity, Mode=TwoWay}" SelectedValuePath="Description" DisplayMemberPath="Description"/>
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding Path=DataContext.Securities, RelativeSource={RelativeSource AncestorType=DataGrid}}"/>
<Setter Property="IsReadOnly" Value="True"/>
</Style>
</DataGridComboBoxColumn.ElementStyle>
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding Path=DataContext.Securities, RelativeSource={RelativeSource AncestorType=DataGrid}}"/>
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
</DataGrid.Columns>
感谢您提供的任何帮助/建议!
解决方案
推荐阅读
- javascript - 模态关闭后控制到父屏幕
- spring - weblogic上的spring-boot rest应用程序
- php - 头文件中的php变量
- amazon-web-services - 如何删除/撤消/删除 Amazon Aurora RDS 上的待处理修改?
- c - 选择排序算法 (C)
- java - DB2 自动增量主键列在 Spring Boot 中不与 JPA 实体一起使用
- java - Dockers 上的多模块 Maven 项目
- excel - 如何通过 Excel VBA 自动单击 Internet Explorer 11 中的“保存”按钮
- php - 我正在尝试更改 WordPress 主题中的占位符,但找不到它的存在位置
- java - Maven 找不到自定义注解处理器