SelectedItem недоступен из DataGrid в RowDetailsTemplate - PullRequest
0 голосов
/ 01 октября 2018

У меня есть DataGrid, который содержит несколько объектов.В этой DataGrid у меня есть RowDetailsTemplate для размещения всех иерархических данных.Я хочу иметь возможность выбрать объект внутри этой DataGrid, но пока мне не повезло со следующим кодом

    <DataGrid x:Name="leagueList" Grid.Row="1" ItemsSource="{Binding Leagues}" SelectedItem="{Binding SelectedLeague}"
              Margin="0,0,5,0" ColumnWidth="1*"
              CanUserAddRows="False" AutoGenerateColumns="False" IsReadOnly="True" CanUserReorderColumns="False" CanUserSortColumns="False">
        <DataGrid.Resources>
            <utility:SubtractValueConverter x:Key="SubtractValueConverter"/>
        </DataGrid.Resources>
        <DataGrid.RowHeaderTemplate>
            <DataTemplate>
                <Expander Expanded="Expander_Expanded" Collapsed="Expander_Collapsed"/>
            </DataTemplate>
        </DataGrid.RowHeaderTemplate>
        <DataGrid.Columns>
            <DataGridTextColumn Header="League" Binding="{Binding Name}"/>
            <DataGridTextColumn Header="Initials" Binding="{Binding Initials}"/>
        </DataGrid.Columns>
        <DataGrid.RowDetailsTemplate>
            <DataTemplate DataType="{x:Type models:Team}">
                <DataGrid ItemsSource="{Binding Teams}" SelectedItem="{Binding Path=SelectedTeam, UpdateSourceTrigger=PropertyChanged}"
                          CanUserAddRows="False" AutoGenerateColumns="False" IsReadOnly="True" GridLinesVisibility="All"
                          Width="{Binding ActualWidth,ElementName=leagueList, Converter={StaticResource SubtractValueConverter}, ConverterParameter=50}" HorizontalAlignment="Stretch" ColumnWidth="*" Margin="1,1,1,1" BorderThickness="2">
                    <DataGrid.Columns>
                        <DataGridTextColumn Header="Nickname" Binding="{Binding Nickname}"/>
                    </DataGrid.Columns>
                </DataGrid>
            </DataTemplate>
        </DataGrid.RowDetailsTemplate>
    </DataGrid>

Свойство SelectedTeam - это то, что я хочу вызывать, когдаTeam выбрано, но оно, похоже, не привязано к этому свойству, хотя я указываю его как таковое.

    public Team SelectedTeam
    {
        get => _SelectedTeam;
        set
        {
            _SelectedTeam = value;
            System.Windows.MessageBox.Show("Selected Team is: " + _SelectedTeam.Nickname);
            RaisePropertyChangedEvent("SelectedTeam");
        }
    }

Когда я запускаю свое приложение, я даже не получаюMessageBox всплывающее окно, когда я выбираю команду, но я должен.

Вся сетка заполнена правильно, я просто не могу получить SelectedItem из внутренней DataGrid.

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

После использования комментариев Яна ссылка и ответов Сатиша я нашел решение.

Дочерний DataGrid должен найти DataContext своего родителя, поэтому будет работать RelativeResource для указания на тип UserControl, после чего вставляется DataContext перед моим типом свойства.Таким образом, строка кода SelectedItem выглядит следующим образом:

SelectedItem="{Binding Path=DataContext.SelectedTeam, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"
0 голосов
/ 01 октября 2018

Поскольку он находится внутри шаблона, трудно связать выбранный элемент, то, что вы можете сделать, это использовать RelativeSource, ниже приведен синтаксис и пример.

SelectedItem = {Binding Path=SelectedTeam, RelativeSource={RelativeSource AncestorType={x:Type typeOfAncestor}}}

typeOfAncestor: - Тип предка равентип класса, для которого вы предоставили пространство имен в объявлении Xaml, которое является пространством имен модели представления.

Например:

xmlns:local="clr-namespace:WpfApp2" 

, которое должно находиться в верхней частиСтраница xaml

SelectedItem = {Binding Path=SelectedTeam, RelativeSource={RelativeSource AncestorType={x:Type local:ViemModelName}}}

Относительный источник относится или указывает на свойство.Теперь происходит то, что SelectedTeam связывается из модели представления с этим свойством Selected Item.

Надеюсь, это поможет вам.Спасибо,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...