WPF 数据绑定未显示 WPF 表单私有属性的值

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

我花了几个小时在这上面。我已经阅读了有关数据绑定的文档并做了很多研究。有人向我指出了其他一些类似的问题,但虽然他们给了我一些指示,但它们似乎都无法帮助解决我的特定用例。这不是重复的!我不想为显示传递到窗口的对象的一些属性的简单表单实现完整的 M-V-MV 架构。我确实想使用数据绑定,如果有人能指出我到底做错了什么,我将不胜感激。

我正在尝试使用 WPF 窗口进行数据绑定,并将一个简单的对象存储为 Windows 类的属性。

我有一个名为 Car 的类,其属性名为 Make(即大众、奥迪等)。

    public class Car : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        private void OnPropertyChanged([CallerMemberName] String propertyName = "")
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }

        private string _make;
        public string Make
        {
            get => _make;
            set
            {
                _make = value;
                OnPropertyChanged();
            }
        }
        public Car()
        { Make = "Empty";}
    }

在 WPF 表单的 XAML 中,我有一个设置为绑定到 Make 的文本框

<TextBox Text="{Binding Make}"/>

在 WPF 窗体的代码隐藏中,windows 构造函数和 Car 属性是

public WindowCarDetails()
{
// instantiate the private property that contains the class.
//  An empty car has "Empty" as its make
_car = new Car();
InitializeComponent();
this.DataContext = _car;
}

private Car _car;
public Car Car
{
get => _car;
set
    {
    _car = value;
    }
}


在上一个窗口中,我实例化了窗口并将一辆车传递给窗口的 Car 属性。我已经检查过了,这确实成功地传递了汽车详细信息

WindowCarDetails CarDetails = new();
CarDetails.Car = (Car)CarDataGrid.CurrentItem ;


当我对此进行测试时,我发现文本字段的值确实为“Empty”,因此它采用了我创建的空 Car 实例的默认值。但是,它应该显示传递到窗口的 Car 实例的品牌。

我尝试删除 _car=New Car();行,然后文本框就是空白的。

但是,如果我将汽车类作为窗口的一部分,它确实可以工作,但我不想这样做,因为它将窗口与类的生成混合在一起!

有人可以告诉我为什么代码不显示 _cars Make 属性的值吗?

谢谢!

c# wpf
1个回答
0
投票

WindowCarDetails 中的 Car 属性是多余的。删除它并简单地写

WindowCarDetails CarDetails = new();
CarDetails.DataContext = (Car)CarDataGrid.CurrentItem;

如果出于某种原因您需要保留 Car 属性,则其设置器显然必须更新 DataContext:

public Car Car
{
    get => _car;
    set
    {
        _car = value;
        DataContext = _car;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.