C# 如何在运行时添加视图而不使用wpf中的ViewModel
我在主窗口中有一个主网格。主网格有一个上下文菜单。该关联菜单正在绑定到ViewModel。当用户单击上下文菜单项时,新视图将在运行时添加到主网格。之前,当上下文菜单项为单击时,我添加了ViewModel中的视图。但现在只有我知道在ViewModel中使用的视图类型是违反规则的。请大家给出一个简单的例子或链接来说明如何在不使用ViewModel的情况下添加视图C# 如何在运行时添加视图而不使用wpf中的ViewModel,c#,wpf,mvvm,C#,Wpf,Mvvm,我在主窗口中有一个主网格。主网格有一个上下文菜单。该关联菜单正在绑定到ViewModel。当用户单击上下文菜单项时,新视图将在运行时添加到主网格。之前,当上下文菜单项为单击时,我添加了ViewModel中的视图。但现在只有我知道在ViewModel中使用的视图类型是违反规则的。请大家给出一个简单的例子或链接来说明如何在不使用ViewModel的情况下添加视图 <Grid x:Name="mainGrid"> <Grid.
<Grid x:Name="mainGrid">
<Grid.ContextMenu>
<ContextMenu>
<MenuItem Header="Add new Grid">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<i:InvokeCommandAction Command="{Binding Path=AddNewGridCommand}" CommandParameter="{Binding ElementName="mainGrid"}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</MenuItem>
</ContextMenu>
</Grid.ContextMenu>
</Grid>
您可以使用
菜单项
上的单击
事件,并在C#类中处理它(不是ViewModel,而是YourViewName.xaml.cs)。下面是一个如何使用和处理它的示例:@Simonca,感谢您的回复,我在我的项目中关注mvvm。因此不使用代码隐藏。如果您想在不使用viewmodel的情况下添加视图,请共享。MVVM声明有关视图的代码不应在viewmodel类中,但可以在代码隐藏类中。如果您的代码独立于ViewModel,则可以将其写入.xaml.cs文件。请参见为什么需要在代码中创建网格?您是否考虑过改用DataTemplate
s?
private ICommand addNewGridCommand;
public ICommand AddNewGridCommand => addNewGridCommand ?? (addNewGridCommand = new RelayCommand(addGrid, canAddGrid));
private void addGrid(object obj)
{
// Some UI like below
Grid newGrid = new Grid()
{
Height = 100, Background = Brushes.Gray
}
((obj) as Grid).Children.Add(newGrid);
}