Хорошо, я потерян. Со вчерашнего дня я ищу, почему моя привязка данных не работает, как ожидалось.
Поскольку я новичок в WPF, а также в MVVM, было бы понятно, если бы я не использовал тот же подход в том же проекте с 2 другими видами.
Необходимая конфигурация состоит в том, что у меня есть 3 представления, для всех из них я установил DataContext в конструкторе MainWindows на ответственный ViewModel.
Сама модель представления не реализует IPropertyChanged, но модель имеет несколько вложенных объектов, которые делают.
Я связываю со следующим XAML:
<TextBox Grid.Column="1" Grid.Row="0" Margin="1">
<TextBox.Text>
<Binding Path="Model.InsertLine.Destination.Value" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<local:MinMaxLengthValidatonRule Min="7" Max="7"/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
InsertLine имеет свойствоChanged:
public TLTMoveULLine InsertLine
{
get { return _insertline; }
internal set
{
_insertline = value;
if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("InsertLine"));
}
}
Общая привязка к Destination и Unit works. Как и проверка.
Однако в определенный момент я устанавливаю новую строку вставки после того, как она была вставлена в коллекцию ObeservableCollection (_document.Lines). Я ожидаю, что произойдет (и что происходит в двух других представлениях), что текстовое поле будет очищено.
public void AddLine()
{
_document.Lines.Add(InsertLine);
TLTMoveULLine newline = new TLTMoveULLine();
newline.Destination.Value = InsertLine.Destination.Value;
newline.Unit.Value = "";
InsertLine = newline;
}
Свойство в GetLine вызывается, однако делегат PropertyChanged имеет значение null.
У кого-нибудь есть идея, почему он нулевой? Тот же подход работает с 2 отдельными видами, но не с этим ...
Или у меня неправильное представление, и есть лучший способ сделать это?