首页 > 解决方案 > 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。

  1. 我希望用户在组合框中看到安全描述。这就是我设置 DisplayMemberPath="Description" 的原因。
  2. 保存后,我希望将组合框值保存在 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>

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

标签: c#wpfmvvmbindingdatagridcomboboxcolumn

解决方案


推荐阅读