Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.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应用程序的MVVM设计模式中的viewmodel在视图上触发函数_C#_Wpf_Mvvm - Fatal编程技术网

C# 如何从wpf应用程序的MVVM设计模式中的viewmodel在视图上触发函数

C# 如何从wpf应用程序的MVVM设计模式中的viewmodel在视图上触发函数,c#,wpf,mvvm,C#,Wpf,Mvvm,在我的wpf应用程序中,Iam使用MVVM设计模式,并面临需要从ViewModel执行视图后端(xaml.cs)中存在的方法的情况。我怎么能做到呢 如果我能避免打破MVVM模式规则,那就更好了。我同意Ilian的观点——这似乎是MVVM Light的Messenger的一个很好的使用案例,或者对于您正在使用的任何MVVM框架(或者没有)来说,都是一个相当好的使用案例。简而言之,我们想要实现一个中介模式来与您的视图进行通信 我通过使用视图为其ViewModel提供的IViewService,提供了

在我的wpf应用程序中,Iam使用MVVM设计模式,并面临需要从ViewModel执行视图后端(xaml.cs)中存在的方法的情况。我怎么能做到呢


如果我能避免打破MVVM模式规则,那就更好了。我同意Ilian的观点——这似乎是MVVM Light的Messenger的一个很好的使用案例,或者对于您正在使用的任何MVVM框架(或者没有)来说,都是一个相当好的使用案例。简而言之,我们想要实现一个中介模式来与您的视图进行通信

我通过使用视图为其ViewModel提供的IViewService,提供了这方面的详细信息和概述,以及另一种替代方法


(DataTriggers将是另一种可能的方法,但您的问题缺少有关视图如何构造、数据绑定等的详细信息。)

一种简单而廉价的方法是创建PropertyDependency,然后将其绑定到xaml中的viewmodel

    public static readonly DependencyProperty RefreshViewProperty =
        DependencyProperty.Register("RefreshView", typeof(bool), typeof(MyView), new PropertyMetadata(false, OnRefreshViewChanged));

    private static void OnRefreshViewChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        MyView mv = (MyView)d;

        mv.DoStuff();

        ((MyViewModel)mv.DataContext).RefreshFromViewModel = false;
    }
xaml将是:

<MyView RefreshView="{Binding RefreshFromViewModel}" />


数据属性是否绑定到视图中的元素?我想知道为什么需要从视图中“重新加载电路板”。为什么不能先使用viewmodel生成一个新板。我需要保留viewmodel中的一些值,并且我正在使用导航服务,但我现在知道它正在为每个对naigationservice.navigate()的调用生成一个新的datacontext……在这种情况下。避免每次使用navigationservice时创建新的viewmodel不是更好的方法吗?也许您应该先从mainwindowviewmodel使用viewmodel。无法从您所解释的内容中看出..“我试图在视图中执行一个函数,在视图模型中的一些数据更改上”--这个函数做什么?视图应该只显示viewmodel的状态,并随着viewmodel引发更改通知而更新。如果需要对来自viewmodel的数据进行某种逻辑处理,那么这可能属于一个或类似的类型。我们需要更详细地了解您正试图做什么。