之前一直在写Java,最近公司接了个c#项目,是用wpf实现的,我搭了一个MVVM的框架,并且集成了MaterialDesign。
        
        现在我遇到的问题是如果当前存在多个窗口,我如果想在viewmodel中新建一个窗口,并控制除了新建的窗口外所有窗口的关闭,就只能通过创建viewmodel时传递当前的viewmodel实现,这样的话代码依赖性太强了,特别混乱,如果进行传值的话也是如此。       请问有没有什么办法实现对窗口viewmodel和view进行统一管理的公共方法?       初入c#本人认识还浅,有什么说错的地方还希望各位指正。

解决方案 »

  1.   

    公共类调用    public class WindowHelper
        {
        public static readonly DependencyProperty DialogResultProperty = DependencyProperty.RegisterAttached(
                    "DialogResult",typeof(bool?),typeof(WindowHelper),new PropertyMetadata(DialogResultChanged));
       private static void DialogResultChanged(DependencyObject dependencyObject,DependencyPropertyChangedEventArgs e)
            {
                if (dependencyObject is Window window && e.NewValue != null)
                {
                    window.DialogResult = e.NewValue as bool?;
                }
            }
    }
    前台xaml 绑定
        WindowHelper.DialogResult="{Binding DialogResult, Mode=OneWay}"在viewmodel中新建一个DialogResult属性, DialogResult=true;就是关闭,
      

  2.   

    你还是做java吧,C#不适合你
      

  3.   

    写个helper 把view和viewmodel都存进去 
    然后随你怎么折腾
      

  4.   

    window???你凭啥要管window啊,你管了window依赖才强。后面有人说,这个window要改,这个window不是我想要的,这个window要根据A+B+C去选择。兄弟,你觉着这个依赖强不强。实在想写的话,请委托出去。让外面的人折腾去,你别管。
      

  5.   

    推荐vm和vm之间通过消息中心来相互通信