мне очень интересно, как это работает, потому что у меня MainViewModel
, который недвижимости говорят, что под названием SubViewModel
, который имеет свойство ObservableCollection (мы будем называть его Property1
.)Что происходит внутри, когда вы привязываетесь к ItemSource?
Я реализовал INotifyChangedProperty на все.
My Main Window
<Window ..
DataContext="{Binding MainViewModel}" />
...
<StackPanel DataContext="{Binding SubViewModel}">
<local:SomeControl DataContext="{Binding}" />
</StackPanel>
</Window>
И мой UserControl
<UserControl Name="SomeControl">
<DataGrid Name="MyDataGrid" ItemSource="{Binding Property1, Mode=TwoWay}" CurrentCellChanged="TestMethod" />
...
</UserControl>
В моем методе испытаний, так как тест, чтобы выяснить, почему эти изменения не propegating до основной посмотреть модель Я делаю что-то вроде этого
private void TestMethod()
{
var vm = this.DataContext as SubViewModel;
var itemSourceObservableCollection = MyDataGrid.ItemsSource as ObservableCollection<MyType>;
//I thought vm.Property1 would be equal to itemSourceObservableCollection
//but they are not, itemSourceObservableCollection shows the changes I've made
//vm.Property1 has not reflected any changes made, even though I though they were the same item
}
Итак, я понял, что ItemSource должен создать копию элемента, к которому вы его привязываете? Я застрял здесь, как вручную уведомлять viewModel о том, что это свойство изменилось и его необходимо обновить? Я думал, что это была работа с INotifyPropertyChanged?
Я думаю, что часть моей проблемы - это отсутствие понимания того, как этот вид работает внутри. Если кто-нибудь может указать на хорошее сообщение в блоге или документацию, чтобы помочь мне понять, почему мой код работает не так, как я ожидал, это было бы здорово.
_The изменения не propegating до основного вида model_ - какие изменения? Afaik 'Mode = TwoWay' не поддерживается для' ItemsSource'. –
_I думал, что это была работа с INotifyPropertyChanged? _ Нет, это работает только в другом направлении (ViewModel -> View). –
@HenkHolterman, wadr, поддерживается на шаблонных деталях –