zoukankan      html  css  js  c++  java
  • Silverlight中使用MVVM(8)使用AttachedProperty关闭ChildWindow

    Silverlight中使用MVVM(1)--基础

    Silverlight中使用MVVM(2)—提高

    Silverlight中使用MVVM(3)—进阶

    Silverlight中使用MVVM(4)—演练

    Silverlight中使用MVVM(5)-Command II

    Silverlight中使用MVVM(6):AutoComplteBox的异步过滤

    Silverlight中使用MVVM(7):DataGrid中触发Button的Click事件

       

        在使用MVVM的应用程序过程中,有时候你会发现尽管一些代码在Codebehind方式非常方便,但是有时项目组为了统一开发流程,需要成员遵循严格的MVVM模式,你不得不去多了解一些知识,比如我博客中提到的Behavior的使用.

        本文主要解决如何在MVVM模式下关闭一个ChildWindow,在Codebehind中只需要this.DialogResult = false这行代码就可以解决,本文给出一种使用

    附加属性解决这个问题的思路:

        public static class ChildwindowDialogResult
    
        {
    
            public static readonly DependencyProperty DialogResultProperty =
    
                DependencyProperty.RegisterAttached("DialogResult", typeof(Boolean?), typeof(ChildwindowDialogResult),
    
                                                    new PropertyMetadata(OnSetDialogResultCallback));
    
            public static void SetDialogResult(ChildWindow childWindow, Boolean? dialogResult)
    
            {
    
                childWindow.SetValue(DialogResultProperty, dialogResult);
    
            }
    
            public static Boolean? GetDialogResult(ChildWindow childWindow)
    
            {
    
                return childWindow.GetValue(DialogResultProperty) as Boolean?;
    
            }
    
            private static void OnSetDialogResultCallback(DependencyObject dependencyObject,
    
                                                          DependencyPropertyChangedEventArgs e)
    
            {
    
                var childWindow = dependencyObject as ChildWindow;
    
                if (childWindow != null) childWindow.DialogResult = e.NewValue as bool?;
    
            }
    
        }
       定义了一个DialogResultProperty,关于附加属性的概念我就不多说了,如果不清楚,去MSDN上找一下。
      使用方法如下:
    <controls:ChildWindow
    
        xmlns:AttachPropertyInMVVM="clr-namespace:AttachPropertyInMVVM" 
    
        x:Class="AttachPropertyInMVVM.Views.ChildView"
    
               
    
        AttachPropertyInMVVM:ChildwindowDialogResult.DialogResult="{Binding DialogResult,Mode=OneWay}"/>

      将该属性绑定至ViewModel中定义的DialogResult属性就可以了,具体View与ViewModel如何交互,请参考下面的源码。

       代码下载:AttachPropertyInMVVM

  • 相关阅读:
    C++中类模板的概念和意义
    欢迎访问新博客aiyoupass.com
    P2327
    P2885
    P1968
    Link-Cut-Tree
    树的重心
    点分治笔记
    SPOJ 375
    树链剖分
  • 原文地址:https://www.cnblogs.com/626498301/p/2476955.html
Copyright © 2011-2022 走看看