Привязка к SelectedItem в списке, который находится в DataTemplate для ContentControl

Используя подход MVVM, у меня есть представление, которое содержит ListBox, а также сетку, в которой я хочу отобразить информацию о SelectedItem в ListBox. Я хочу установить DataContext для сетки в SelectedItem.

Однако элемент ListBox похоронен следующим образом: ContentControl, привязанный к DataTemplate, который является представлением UserControl, содержащим элемент ListBox.

Вот сетка главного окна, которую я не уверен, как привязать:

<Grid DataContext="{Binding ElementName=MyList, ????}">

Вот ContentControl в том же представлении:

<ContentControl x_Name="MyList"
                Content="{Binding}" 
                ContentTemplate="{StaticResource MyListTemplate}"/>

Вот шаблон данных в том же представлении:

    <Window.Resources>
        <DataTemplate x_Key="MyListTemplate">
            <v:MyListView/>
        </DataTemplate>
    </Window.Resources>

Вот MyListView:

<UserControl>
    <ListBox Name="MyListBox" ItemsSource="{Binding ItemList}"/>
</UserControl>

Я добавляю к коду, который я написал пару лет назад и некоторое время был вдали от WPF, поэтому, увы, я ржавый на моей привязке данных. Я пытался добавить свойство SelectedItem в модель представления для MyListView и / или MainWindow. Я ожидаю, что это может потребовать RelativeSource.

1 ответ

  1. Doh! Я забыл указать onpropertychanged вызова для моей собственности.

    В списке UserControl мне это было необходимо:

    ItemsSource="{Binding ItemList}" SelectedItem="{Binding MySelectedItem}"
    

    В модели представления главного окна мне это было необходимо:

    public MyItemViewModel MySelectedItem
    {
        get { return _mySelectedItem; }
        set
        {
            _mySelectedItem = value;
            OnPropertyChanged("MySelectedItem");
        }
    }
    

    Тогда в главном окне привязка просто:

    <Grid DataContext="{Binding MySelectedItem}">