c# - 在 WPF/MVVM 上导航/加载不同的 View

标签 c# wpf mvvm view navigation

我对 WPF 开发很陌生,目前我正在尝试在我的应用程序开发中使用 MVVM。我已经阅读了很多关于 MVVM 导航和切换 View 的内容,但我找不到适合我当前情况的解决方案。让我们解释一下它是什么:
首先,我有我的主 View 元素,一个 Dockpanel,有一些固定区域,以及一个内容应该改变的主要“动态”区域,具体取决于操作:

<DockPanel>
    <Label Content="Top Fixed element"/>
    <StackPanel Orientation="Vertical" Height="auto" Width="150" DockPanel.Dock="Left">
        <Label Content="SomeOptions"/>
        <!-- some more elements -->
    </StackPanel>
    <Label DockPanel.Dock="Bottom" Content="Foot"/>        
    <ContentControl Content="{Binding CurrentMainViewElementViewModel}"/>        
</DockPanel>

我已经定义了一些我想在这个 ContentControl 中加载的数据模板,这里有一个数据模板作为示例:
<Window.Resources>
    <DataTemplate DataType="{x:Type ViewModel:FileLoaderVM}">
        <View:FileLoaderView/>
    </DataTemplate>
</Window.Resources>

这个 FileLoader( View 和 View 模型是使用 RelayCommand 和 INotifyPropertyChanged 实现的)在单击按钮后打开一个对话框,在选择文件后打开并解析它,并在 ListView 中显示所有找到的元素,并带有多个选择(在这种情况下,有数据的人)。
我现在要做的是在单击按钮时在此 ContentControl 中加载另一个用户控件。这个按钮在我的 View 模型中定义如下:
public ICommand LoadPersons
    {
        get { return new RelayCommand(param => this.loadSelectedPersons(), param => (SelectedPersons!=null && SelectedPersons.Any()));}
    }

我的问题出现在这一点上,如何修改 ContentControl 的内容,直接从我的 View 模型加载另一个用户控件而不是当前的用户控件(在这个“this.loadSelectedPersons()”中)?
如果这是不可能的,我应该如何解决这个问题?
在此操作旁边,我想显示所有先前选择的元素并以不同的可能方式进行操作(插入数据库,保存在另一个文件中等等),并且我已经有了合适的用户控件,我想要在 ContentControl 部分的主视图元素中显示,保持其他元素原样。

最佳答案

让我们看看我是否正确。

您有一个主视图模型,其属性 (CurrentMainViewElementViewModel) 绑定(bind)到 ContentControl。您的 MainViewmodel 将 FileLoaderVM 设置为此属性。现在您想在 FileLoaderVM 中选择文件时显示“新/其他” View 模型?

为什么不简单地从 FileLoaderVM 公开一个事件并在 MainViewModel 中订阅该事件?如果您这样做,您的 MainViewModel 可以将“新/其他” View 模型设置为 ContentControl

关于c# - 在 WPF/MVVM 上导航/加载不同的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26931765/

相关文章:

c# - 删除文本框上的默认鼠标悬停/焦点效果

c# - 通过 MVVM 模式缩放绘图?

C# Skype 插件

c# - AJAX 调用的空白输出

c# - 新 AppDomain 中的 Web 应用程序中的 "The type LogWriter cannot be constructed"

java - 如何防止ZK按钮多次点击并提交?

android - 如何在 Android 中使用 MVVM 数据绑定(bind)验证表单 ViewModel?

c# - 面经应用

c# - 架构师能说对吗 "MVVM only splits the code behind to multiple (3) files "

c# - 当 DataTemplate 为 Button 时,ListBox 项返回字符串