#c# #wpf #binding
#c# #wpf #привязка
Вопрос:
Я получил пользовательский класс свойств WPF с именем «RFPGegevens»
public class RFPGegevens
{
private string _klant;
public String Klant
{
get { return _klant; }
set { _klant = value; }
}
}
В моей ViewModel я получил свойство RFPGegevens
private RFPGegevens _rfpGegevens;
public RFPGegevens RfpGegevens
{
get
{
if (_rfpGegevens == null)
_rfpGegevens = new RFPGegevens();
return _rfpGegevens;
}
set
{
_rfpGegevens = value;
base.RaisePropertyChangedEvent("RfpGegevens");
}
}
Это свойство заполнено правильно, если я выполняю отладку, это результат:
На мой взгляд, я привязываю свойство «RFPGegevens» к datacontext моей сетки
<Grid DataContext="{Binding RfpGegevens}">
и все же, если я выполняю отладку, поле свойства «Klant» заполняется.
Но поскольку я привязываю это свойство в представлении, мое текстовое поле по-прежнему пустое.
<TextBox Text="{Binding Klant, Mode=TwoWay}"/>
Я тоже пробовал это, но, похоже, ничего не работает:
<TextBox Text="{Binding RFPGegevens.Klant, Mode=TwoWay}"/>
Не знаю, что я делаю не так.
Заранее спасибо 😉
Комментарии:
1. Где вы отлаживали метод доступа к получению? Гарантируется ли, что он вызывается WPF для привязки текстового поля? Что говорит окно вывода в VS о привязке при запуске?
2. Правильно ли вы установили привязку Windows datacontext?
3. Реализует ли ваша ViewModel INotifyPropertyChanged, я вижу, что вы вызываете base.RaisePropertyChanged .
4. Я реализовал INotifyPropertyChanged, и Windows datacontext привязан правильно. И для Андреаса, не могли бы вы переформулировать свой вопрос, пожалуйста?
5. Итак, если вы помещаете текстовое поле за пределы сетки, оно привязывается правильно? И просто быстрая проверка.. Klant, Mode=TwoWay}»/> использует запрос запроса, в то время как ваш реквизит называется Rfp
Ответ №1:
попробуйте сделать две вещи
<TextBox Text="{Binding Klant, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
public class RFPGegevens
{
private string _klant;
public String Klant
{
get { return _klant; }
set {
_klant = value;
//Raise the property changed event here
}
}
}
Ответ №2:
Вам также необходимо реализовать интерфейс INotifyPropertyChanged для вашего пользовательского класса, как показано ниже:
public class RFPGegevens : INotifyPropertyChanged
и вызывайте события propertychanged из набора средств доступа ваших свойств.
Ответ №3:
Вы забыли добавить наследование от INotifyPropertyChanged