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