相关疑难解决方法(0)

如何使用MVVM Light for WPF浏览窗口?

我刚刚开始了一个新项目,其中表示层将由WPF完成,MVVM Light由GalaSoft完成.

我需要很多观点,而且我不清楚如何通过窗口管理导航.

首先,MVVM Light中提供的用于创建新的"WPF MVVM视图"的模板创建了一个Window不能用于逐帧导航的新模板(我的意思是,通过放置一个框架mainView并更改源路径进行导航).

难道我只是必须改变Window,以Page用于创建使用模板的所有看法?

或者是否有不同的方法在MVF中使用MVVM Light工具包执行导航?

wpf design-patterns mvvm mvvm-light

18
推荐指数
2
解决办法
3万
查看次数

如何从其他视图模型中调用主视图模型中的函数?

我的节目由一个TreeView和两个contentPresenters地面组成.mainWindow,TreeView和每个contentPresenter都有自己的viewModels.

我想调用一个函数在mainWindowViewModelTreeViewViewModel.

我需要这样做,因为mainWindowViewModel控件显示的内容contentPresenters,我想手动更新显示.

我猜我会做这样的事......

TreeViewViewModel:

public class TreeViewViewModel
{
     //Do I need to declare the MainWindowVM?

     public TreeViewViewModel() { ... }

     private void function()
     {
          //Command that affects display

          //Manually call function in MainWindowVM to refresh View
     }
}
Run Code Online (Sandbox Code Playgroud)

我试图通过使用来访问MainWindowVM来自TreeViewViewModel:

public MainWindowViewModel ViewModel { get { return DataContext as MainWindowViewModel; } }
Run Code Online (Sandbox Code Playgroud)

但它没有多大意义.因为MWVM不是DataContextTreeViewViewModel.

c# wpf mvvm viewmodel

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

绑定时 DataItem=null,找不到原因?

我试图重现Sheridan 对这个问题的回答中建议的内容,以便在将 WPF 与 MVVM 模式一起使用时浏览我的视图。不幸的是,当我这样做时,我遇到了绑定错误。这是确切的错误:

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='JollyFinance.ViewModels.MainViewModel', AncestorLevel='1''. BindingExpression:Path=DataContext.DisplayTest; DataItem=null; target element is 'Button' (Name=''); target property is 'Command' (type 'ICommand')
Run Code Online (Sandbox Code Playgroud)

当我查看 LoginView.xaml 中的 xaml 代码时,我注意到 Visual Studio 告诉我它无法DataContext.DisplayText在 type 上下文中找到MainViewModel。我尝试过删除DataContext.并保留DisplayText,但无济于事。

除非谢里登的答案有错误,否则我肯定在这里遗漏了一些东西。我应该做什么才能让它发挥作用?

主窗口.xaml:

<Window x:Class="JollyFinance.Views.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:vm="clr-namespace:JollyFinance.ViewModels"
        xmlns:views="clr-namespace:JollyFinance.Views"
        Title="JollyFinance!" Height="720" Width="1280">

    <Window.Resources>
        <!-- Different pages -->
        <DataTemplate DataType="{x:Type vm:LoginViewModel}">
            <views:LoginView/>
        </DataTemplate>
        <DataTemplate DataType="{x:Type vm:TestViewModel}">
            <views:Test/>
        </DataTemplate> …
Run Code Online (Sandbox Code Playgroud)

c# navigation data-binding wpf mvvm

6
推荐指数
1
解决办法
5438
查看次数

导航MVVM

我试图坚持使用MVVM设计模式的尝试让我在旋转.我有一个视图,是一个网站位置的选择列表.我有一个viewmodel,视图从中获取数据上下文,并且我已经使用按钮等绑定了一些项目(yay!).

现在我正在尝试从视图中的按钮单击切换当前视图. 我的页面

通过单击"开始维护"按钮,我想将视图切换到另一个具有不同视图模型的视图.

所以我知道MVVM只是一种设计模式,似乎有很多不同的实现MVVM导航的方式.但是我看到的大多数这些解决方案都指向了一个主导航窗格,这不是我打算做的.

我现在计划尝试使用带有MVVM光信使模式的viewmodellocator来尝试让我的观点改变.但是在过去3天试图让这件事情发挥作用后,我正在变得绝望.关于如何实现这个有什么其他建议吗?我喜欢Sheridan对类似帖子的回答:WPF MVVM导航视图,因为它避免使用工具包/框架.但我认为答案可能对我来说太模糊了,我无法实现它,因为我不明白如何改变观点(Sheridan的自定义中继消息很难像新手一样).

帮助请你互联网Denizens!:)如果你能指出我也会赞赏的任何例子!

c# navigation wpf mvvm

5
推荐指数
1
解决办法
389
查看次数

MVVM Light - 用户控件作为视图

我决定使用MVVM Light库来帮助设计UI.经过大量的研究和反复试验,我还没有找到我想要的答案.我用谷歌搜索并阅读了我能找到的每个StackOverflow问题,然而,我的问题似乎在SO上是独一无二的.

我希望设计一个带有单个窗口的UI,并使用不同的Views/UserControls填充它.我不想在UserControls中使用共享导航栏,也不想弹出多个窗口.每个View/UserControl都应绑定到自己的ViewModel,而MainWindow将绑定到MainViewModel.

示例场景 - 具有3个UserControl的MainWindow

1. MainWindow populates with first UserControl which has a listbox and 3 buttons, the first button is enabled.
2. User clicks the first button.
3. MainWindow populates with second UserControl.
Run Code Online (Sandbox Code Playgroud)

或者,另外

 2. User selects choice from a listbox, button two and three become available.
 3. User clicks second/third button.
 4. MainWindow populates with second/third UserControl.
Run Code Online (Sandbox Code Playgroud)

等等

也许我的方法不现实,但我觉得这必须是可能的.我不明白如何让所有这些作品在概念上发挥作用.我的欲望绝不是独一无二的.如果您认为这是重复的问题,请重定向.干杯.


为了使事情更容易理解,我在下面列出了一些课程.首先,我的App.xaml.

<Application x:Class="Bobcat_BETA.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:views="clr-namespace:Bobcat_BETA.UserControls"
             xmlns:vm="clr-namespace:Bobcat_BETA.ViewModels"
             StartupUri="MainWindow.xaml"
             mc:Ignorable="d">
    <Application.Resources>
        <vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" />

        <DataTemplate …
Run Code Online (Sandbox Code Playgroud)

c# xaml user-controls mvvm mvvm-light

5
推荐指数
1
解决办法
6125
查看次数

使用 MVVM 的 WPF 导航

我正在尝试按照这篇文章中提供的答案进行操作,但我一定遗漏了一些微不足道的东西。我将我的DataTemplates定义App.xaml如下:

<Application.Resources>
    <DataTemplate DataType="{x:Type vm:BlowerViewModel}">
        <v:BlowerView />
    </DataTemplate>
    <DataTemplate DataType="{x:Type vm:HomeViewModel}">
        <v:HomeView />
    </DataTemplate>
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)

然后,在我的MainWindow.xaml我已经定义了以下代码:

<Window x:Class="App.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:vm="clr-namespace:App.UI.ViewModel"
        Title="MainWindow" SizeToContent="WidthAndHeight">
    <Window.DataContext>
        <vm:MainViewModel />
    </Window.DataContext>
    <ContentControl Content="{Binding CurrentView}" />
</Window>
Run Code Online (Sandbox Code Playgroud)

的代码MainViewModel包含一个属性CurrentView和一个ICommand以便我可以切换视图。定义如下:

public class MainViewModel : BaseViewModel
{
    private BaseViewModel _currentView;

    public MainViewModel()
    {
        CurrentView = new HomeViewModel();
    }

    public BaseViewModel CurrentView
    {
        get { return _currentView; }
        set
        {
            if (_currentView != …
Run Code Online (Sandbox Code Playgroud)

.net c# wpf mvvm

5
推荐指数
1
解决办法
907
查看次数

使用ContentControl在WPF中显示视图不起作用

我目前正在研究一个小项目,以便更好地学习WPF,我问自己的一个问题是,如果我想遵循MVVM模式,不同视图之间的导航将如何工作.

我在这里回答了我的问题时偶然发现了这个问题,但不幸的是它似乎没有用.它不是显示我的视图,而是仅显示关联视图模型的命名空间.所以,例如,我没有看到我的LoginView,而是看到一个白色的屏幕上写着"JollyFinance.ViewModels.LoginViewModel".

这是我的MainWindow.xaml代码:

<Window.Resources>
    <!-- Different pages -->
     <DataTemplate x:Key="LoginView" DataType="vm:LoginViewModel">
        <views:LoginView />
    </DataTemplate>
</Window.Resources>

<Window.DataContext>
    <vm:MainViewModel/>
</Window.DataContext>

<Grid>
    <ContentControl Content="{Binding CurrentViewModel}"/>
</Grid>
Run Code Online (Sandbox Code Playgroud)

这是我的MainViewModel.cs:

public class MainViewModel : BindableObject
{
    private ViewModelNavigationBase _currentViewModel;

    public MainViewModel()
    {
        CurrentViewModel = new LoginViewModel();
    }

    public ViewModelNavigationBase CurrentViewModel
    {
        get { return _currentViewModel; }
        set
        {
            if (_currentViewModel != value)
            {
                _currentViewModel = value;
                RaisePropertyChanged();
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的LoginViewModel.cs文件:

    public LoginViewModel()
    {
        LoginCommand = new RelayCommand(Login);
        NavigateCommand = new …
Run Code Online (Sandbox Code Playgroud)

c# navigation wpf xaml mvvm

4
推荐指数
2
解决办法
5882
查看次数