Привязка класса к свойству класса в WPF C # с помощью Datacontext

#c# #wpf #datacontext

#c# #wpf #datacontext

Вопрос:

Как получить доступ к свойству в классе в свойстве класса. Значение 2 работает, значение 1 нет. Если я привязываю значение 1 в codeBehind, значение 1 работает. Фактический код:

 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>
  

Ответ №1:

Выражение

 Class1 class1 = new Class1();
  

объявляет локальную переменную в конструкторе Class2, которая не имеет никакого значения вне конструктора.

Вероятно, вы хотели иметь свойство типа Class1 в Class2 :

 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";
    }

    ...
}