Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在运行时添加视图而不使用wpf中的ViewModel_C#_Wpf_Mvvm - Fatal编程技术网

C# 如何在运行时添加视图而不使用wpf中的ViewModel

C# 如何在运行时添加视图而不使用wpf中的ViewModel,c#,wpf,mvvm,C#,Wpf,Mvvm,我在主窗口中有一个主网格。主网格有一个上下文菜单。该关联菜单正在绑定到ViewModel。当用户单击上下文菜单项时,新视图将在运行时添加到主网格。之前,当上下文菜单项为单击时,我添加了ViewModel中的视图。但现在只有我知道在ViewModel中使用的视图类型是违反规则的。请大家给出一个简单的例子或链接来说明如何在不使用ViewModel的情况下添加视图 <Grid x:Name="mainGrid"> <Grid.

我在主窗口中有一个主网格。主网格有一个上下文菜单。该关联菜单正在绑定到ViewModel。当用户单击上下文菜单项时,新视图将在运行时添加到主网格。之前,当上下文菜单项为单击时,我添加了ViewModel中的视图。但现在只有我知道在ViewModel中使用的视图类型是违反规则的。请大家给出一个简单的例子或链接来说明如何在不使用ViewModel的情况下添加视图

             <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);
}