DataGridComboBoxColumn不绑定回UI

时间:2019-01-14 18:05:37

标签: c# wpf mvvm binding datagridcomboboxcolumn

我对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。

  1. 我希望用户在组合框中看到安全说明。这就是为什么我设置DisplayMemberPath =“ Description”的原因。
  2. 保存时,我希望将组合框值保存在Pricing.ParentSecurity中。这就是为什么我按如下所示设置SelectedValueBinding和SelectedValuePath的原因。

证券列表正确显示了组合框。与视图对象的绑定正在工作(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>

感谢您可以提供的任何帮助/建议!

0 个答案:

没有答案