Моя цель - показать новое окно, если щелкнуть правой кнопкой мыши элемент в 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();
}