相关疑难解决方法(0)

WPF使用MVVM模式浏览视图

我正在使用MVVM模式构建我的第一个WPF.在这个社区的帮助下,我设法创建了我的模型,我的第一个ViewModel和视图.现在我想为设计基本应用程序布局界面的应用程序添加一些复杂性.我的想法是至少有2个子视图和一个主视图,并将它们分成几个XAML:

  • Main.XAML
  • Products.XAML
  • Clients.XAML

Main将有一个菜单和一个空间来加载子视图(产品和客户端).现在遵循MVVM模式,视图之间的所有导航逻辑都应该在ViewModel上写入.所以mi想法是拥有4个ViewModel:

  • MainViewModel
  • ProductsViewModel
  • ClientsViewModel
  • NavigationViewModel

那么NavigationViewModel应该包含一个子视图模型的集合?一个活跃的viewmodel是吗?

所以我的问题是:

1)如何使用MVVM模式在主视图上加载不同的视图(产品,客户端)?

2)如何实现导航viewModel?

3)如何控制打开或活动视图的最大数量?

4)如何在打开的视图之间切换?

我一直在做大量的搜索和阅读,并且找不到任何简单的MVVM导航示例,其中WPF在主视图中加载了多个视图.许多人:

1)使用外部工具包,我现在不想使用它.

2)将所有视图的所有代码放在一个XAML文件中,这似乎不是一个好主意,因为我需要实现近80个视图!

我在这里正确的道路?任何帮助,特别是一些代码将不胜感激.

UPDATE

所以,我按照@LordTakkera的建议建立了一个测试项目,但是卡住了.这就是我的解决方案的样子: 解

我创造:

  • 两种型号(客户和产品)

  • 一个MainWindow和两个wpf用户控件(客户端和产品)XAML.

  • 三个ViewModel(客户端,产品和主ViewModel)

然后我将每个视图上的dataContext设置为相应的viewModel.之后,我使用ContentPresenter创建MainWindow,并将其绑定到viewmodel的属性.

MainWindow.XAML

<Window x:Class="PruevaMVVMNavNew.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="519" Width="890">    
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="150"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="80"/>
        <RowDefinition Height="*"/>
        <RowDefinition Height="20"/>
    </Grid.RowDefinitions>        
    <Border Grid.Column="0" Grid.ColumnSpan="2" Background="AntiqueWhite" ></Border>
    <Border Grid.Row="1" Grid.RowSpan="2" Background="AliceBlue"></Border>
    <Border Grid.Row="1" Grid.Column="1" Background="CadetBlue"></Border>                
    <ContentPresenter Grid.Row="1" Grid.Column="1" x:Name="ContentArea" Content="{Binding CurrentView}"/>        
    <StackPanel Margin="5" Grid.Column="0" Grid.Row="1">            
        <Button>Clients</Button>
        <Button>Products</Button>
    </StackPanel>
</Grid>
Run Code Online (Sandbox Code Playgroud)

这也是来自MainWindow的viewmodel:

class Main_ViewModel : …
Run Code Online (Sandbox Code Playgroud)

c# wpf xaml mvvm

42
推荐指数
1
解决办法
3万
查看次数

WPF ListBox,如何隐藏边框并更改所选项目的背景颜色?

我想隐藏ListBox的边框,并使所选项目的背景与未选择的项目相同.

我该怎么做呢?

wpf control-template

29
推荐指数
1
解决办法
3万
查看次数

标签 统计

wpf ×2

c# ×1

control-template ×1

mvvm ×1

xaml ×1