WPF 组合框绑定未更新

问题描述 投票:0回答:1

我有一个 WPF 应用程序,其中有两个组合框,代表分配给某项工作的生产/制造工程师,其中 CurrentEngNotice 是相关工作:

<TextBlock Text="Product Engineer:" Style="{StaticResource HeaderStyleTextBlock}" HorizontalAlignment="Left"/>
<ComboBox Grid.Column="1" 
      ItemsSource="{Binding ProductionEngineers}" 
      DisplayMemberPath="FullName"
      SelectedValuePath="UserID"
      SelectedValue="{Binding CurrentEngChangeNotice.ProductEng.UserID, Mode=TwoWay}"/>
<TextBlock Grid.Row="1" Text="Manufacturing Engineer:" Style="{StaticResource HeaderStyleTextBlock}" HorizontalAlignment="Left"/>
<ComboBox Grid.Row="1" Grid.Column="1" 
     ItemsSource="{Binding ManufacturingEngineers}" 
     DisplayMemberPath="FullName"
     SelectedValuePath="UserID"
     SelectedValue="{Binding CurrentEngChangeNotice.MfgEng.UserID, Mode=TwoWay}"/>

这些组合框的绑定是有效的,因为它显示了数据库中填充内容的正确值。但是,当我从应用程序更改此字段时,该字段的设置器不会运行,因此数据库不会更新。这些是绑定属性:

    public Engineer ProductEng
    {
        get { return _productEngineer; }
        set 
        {
            if (_productEngineer != value)
            {
                _productEngineer = value;
                OnPropertyChanged();
                UpdateDatabase("PRODUCT_ENG", value.UserID);
            }

        }
    }

    public Engineer MfgEng
    {
        get { return _mfgEngineer; }
        set
        {
            if (_mfgEngineer != value)
            {
                _mfgEngineer = value;
                OnPropertyChanged();
                UpdateDatabase("MFG_ENG", value.UserID);
            }

        }
    }

通过调试,我已经确认问题不在于 UpdateDatabase 方法,因为 setter 从未被触发。我知道这不是 NULL 问题,因为在数据库方面,我们在创建记录时应用默认的“未知工程师”,这会在我创建新记录时显示。我还可以确认这不是 DataContext 问题,因为除了这两个字段之外的每个字段都按预期触发。感觉我一定是缺少 XAML 中的某个设置,但我在这里不知所措。

c# wpf data-binding
1个回答
0
投票

像这样的绑定

SelectedValue="{Binding CurrentEngChangeNotice.ProductEng.UserID}"

(默认为 TwoWay),正在改变的是

UserID
属性所持有的 Engineer 对象的
ProductEng
属性,而不是
ProductEng
属性本身。

您应该如下所示更改属性声明(假设

UserID
属性类型为字符串)。

public string ProductEngID
{
    get { return _productEngineerID; }
    set 
    {
        if (_productEngineerID != value)
        {
            _productEngineerID = value;
            OnPropertyChanged();
            UpdateDatabase("PRODUCT_ENG", _productEngineerID);
        }

    }
}

public string MfgEngID
{
    get { return _mfgEngineerID; }
    set
    {
        if (_mfgEngineerID != value)
        {
            _mfgEngineerID = value;
            OnPropertyChanged();
            UpdateDatabase("MFG_ENG", _mfgEngineerID);
        }

    }
}

并将 SelectedValue 绑定更改为:

SelectedValue="{Binding CurrentEngChangeNotice.ProductEngID}"
SelectedValue="{Binding CurrentEngChangeNotice.MfgEngID}"
© www.soinside.com 2019 - 2024. All rights reserved.