Вы можете добавить в свой код операторы debugger
, чтобы остановить выполнение, что позволит вам шагать по коду. Точно так же вы можете запустить процесс Node с аргументом --inspect-brk
, чтобы использовать Chrome DevTools для пошагового выполнения кода.
Вы должны просто удалить строку:
DataContext = new ChildViewModel();
DataContext
вид будет установлен автоматически WPF. DataTemplates
всегда имеют свой контекст данных, установленный на данные для шаблона (в данном случае ViewModel):
Самый простой способ Для связи между ViewModels с использованием подхода MVVM используется шаблон Mediator (EventAggregator в Prism). Хороший пример такого подхода можно увидеть по следующим ссылкам:
Допустим, у вас есть QueueView, который использует QueueViewModel.
public class QueueViewModel : INotifyPropertyChanged
{
public ParentType Parent { get; set; }
public QueueViewModel(ParentType parent)
{
this.Parent = parent;
foreach (ChildType child in Parent)
{
child.PropertyChanged += delegate(object sender,
PropertyChangedEventArgs e)
{
if (e.PropertyName != "IsSelected")
return;
//do something like this:
Parent.IsSelected = AllChildrenAreSelected();
};
}
}
}
public class ParentType : INotifyPropertyChanged
{
private bool _isSelected;
public IList<ChildType> Children { get; set; }
public bool IsSelected
{
get { return _isSelected; }
set
{
_isSelected = value;
OnPropertyChanged("IsSelected");
}
}
}
public class ChildType : INotifyPropertyChanged
{
private string _name;
private bool _isSelected;
public string Name
{
get { return _name; }
set
{
_name = value;
OnPropertyChanged("Name");
}
}
public bool IsSelected
{
get { return _isSelected; }
set
{
_isSelected = value;
OnPropertyChanged("IsSelected");
}
}
}
- Часть QueueView
<StackPanel>
<CheckBlock Text="{Binding Path=Parent.Name}"
IsChecked="{Binding Parent.IsSelected}"/>
<ItemsControl ItemsSource="{Binding Path=Parent.Children}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding Path=Name}"
IsChecked="{Binding Path=IsSelected, Mode=TwoWay}"/>
</DataTemplate>
<ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>