使用 Datacontext 在 WPF C# 中绑定 class class 属性

Binding class in class property in WPF C# with Datacontext

如何在 class 属性 中访问 class 中的 属性。 Value2 有效,Value1 无效。如果我在 codeBehind 中绑定 Value1,则 Value1 有效。实际代码:

class Class1 : INotifyPropertyChanged
{
    private string _Value1;

    public string Value1
    {
        get { return _Value1; }
        set { _Value1 = value; NotifyPropertyChanged("Value1"); }
    }
    [...]
    }

Class2.cs:

class Class2 : INotifyPropertyChanged
    {
        private string _Value2;

        public string Value2
        {
            get { return _Value2; }
            set { _Value2 = value; NotifyPropertyChanged("Value2"); }
        }

        public Class2()
        {
            Class1 class1 = new Class1();
            class1.Value1 = "Value 1 set";
            Value2 = "Value2 set";
        }
    [...]
    }

MainWindow.xaml.cs

public partial class MainWindow : Window
{
    Class2 class2 = new Class2();
    public MainWindow()
    {
        InitializeComponent();
        this.DataContext = class2;
    }
}

MainWindow.xaml

<Grid>
    <TextBox Text="{Binding Path=class1.Value1}" /> 
    <TextBox Text="{Binding Path=Value2}" />
</Grid>

表达式

Class1 class1 = new Class1();

在Class2构造函数中声明了一个局部变量,在构造函数之外没有任何意义。

您可能希望在 Class2 中有一个类型为 Class1 的 属性:

class Class2 : INotifyPropertyChanged
{
    private Class1 class1;

    public Class1 Class1
    {
        get { return class1; }
        set { class1 = value; NotifyPropertyChanged(nameof(Class1)); }
    }

    public Class2()
    {
        Class1 = new Class1 { Value1 = "Value 1 set" };
        Value2 = "Value2 set";
    }

    ...
}

通过

绑定
<TextBox Text="{Binding Path=Class1.Value1}" /> 

也许 属性 甚至不需要可写:

class Class2 : INotifyPropertyChanged
{
    public Class1 Class1 { get; } = new Class1();

    public Class2()
    {
        Class1.Value1 = "Value 1 set";
        Value2 = "Value2 set";
    }

    ...
}