我对WPF和MVVM还是很陌生。我向DataGrid添加了DataGridComboBoxColumn。绑定到视图对象可以正常工作。但是,当我在保存组合框后重新打开屏幕时,不会显示先前保存的值(基本上从视图绑定到UI无效)。
以下是我要做什么的想法:
以下三个类是我的视图类
ViewPosition是我的数据网格中行的类类型(请参见下面的XAML)。 ViewPosition包含对ViewPricing的引用。 ViewPricing包含对parentSecurity(字符串类型)的引用。 安全性是包含Description属性的安全性。
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。
证券列表正确显示了组合框。与视图对象的绑定正在工作(combobox值已保存到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>
感谢您可以提供的任何帮助/建议!