Как мне запросить новое окно, показывающее данные модели из выбранного элемента? - PullRequest
0 голосов
/ 25 января 2019

Моя цель - показать новое окно, если щелкнуть правой кнопкой мыши элемент в ItemsControl и выбрать Edit в ContextMenu

Это то, что я имею до сих пор. У меня есть MainWindow.xaml, который был бы MainView приложения и в этом представлении у меня есть ItemsControl с DataTemplate из UserCard, который является пользовательским UserControl.

ItemsControl имеет ItemSource для моего ObservableCollection в моей ViewModel

Я установил DataContext в коде позади так:

public MainWindow()
        {
            InitializeComponent();
            this.DataContext = new BaseViewModel();
        }

А вот и XAML

<StackPanel>
        <Grid>
            <ItemsControl ItemsSource="{Binding CardViewModel.Users}"
                          dd:DragDrop.IsDragSource="True"
                          dd:DragDrop.IsDropTarget="True"
                          dd:DragDrop.UseDefaultEffectDataTemplate="True">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <controls:UserCard>
                            <controls:UserCard.ContextMenu>
                                <!-- Bind the DataContext of the CM to the DataContext that's bound to the RootObject-->
                                <ContextMenu DataContext="{Binding DataContext, Source={local:RootObject}}">
                                    <MenuItem Header="Edit"
                                              Command="{Binding CardViewModel.EditUser}" 
                                              CommandParameter="{Binding PlacementTarget.Tag, RelativeSource={RelativeSource AncestorType=ContextMenu}}"/>
                                </ContextMenu>
                            </controls:UserCard.ContextMenu>
                        </controls:UserCard>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>

            </ItemsControl>
        </Grid>

    </StackPanel>

Теперь он отображает два UserCard элемента управления, потому что в ViewModel я добавил два объекта, в коллекцию которых он ItemSource извлекает.

Однако, когда я нажимаю MenuItem в ContextMenu, я хочу открыть новое окно, в котором отображаются TextBlock элементы управления, и они должны быть связаны с отличающимися свойствами от моей модели.

Понятия не имею, как передать эту модель в новое окно

Вот пользовательский контроль

    <TextBlock Text="{Binding Description}"
                   TextWrapping="Wrap"
                   Width="180"
                   VerticalAlignment="Top"
                   Margin="10"
                   FontFamily="Consolas"/>


    <TextBlock Width="100"
                   Height="20"
                   VerticalAlignment="Bottom"
                   HorizontalAlignment="Right"
                   Margin="5"
                   Text="{Binding Name}"
                   FontFamily="Consolas" />


    <TextBlock Width="100"
                   Height="20"
                   VerticalAlignment="Bottom"
                   HorizontalAlignment="Left"
                   Text="{Binding Id}"
                   FontFamily="Consolas"/>
</Grid>

Привязка там работает просто отлично! Я вижу Имя и все в моем ItemsControl MainWindow, но когда я щелкаю правой кнопкой мыши по UserControl, и он отображает новое окно, я не знаю, как его передать.

NewWindow.xaml

<Grid>
        <TextBlock Height="25" Text="{Binding SelectedItemViewModel.Name}"/>
    </Grid>

ViewModel

class BaseViewModel : ObservableObject
{
    public CardViewModel CardViewModel { get; set; } = new CardViewModel();
}

1 Ответ

0 голосов
/ 27 января 2019

Вы привязываетесь к SelectedItemViewModel.Name, но я не вижу это свойство в модели представления ...

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