Silverlight中使用MVVM(8)-使用AttachedProperty关闭ChildWindow

简介: 转自http://www.cnblogs.com/626498301/archive/2012/04/30/2476955.htmlSilverlight中使用MVVM(1)--基础 Silverlight中使用MVVM(2)—提高 Silverlight中使用MVVM(3)—进阶 ...

转自http://www.cnblogs.com/626498301/archive/2012/04/30/2476955.html

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

 
目录
相关文章
|
前端开发 容器
一起谈.NET技术,使用 MEF 公开 Silverlight MVVM 应用程序中的接口
  下载代码示例   许多开发人员可能都将 Silverlight 视为以 Web 为中心的技术,但实际上,它已经成为构建任何应用程序的优秀平台。
948 0
|
前端开发 容器
使用 MEF 公开 Silverlight“.NET研究” MVVM 应用程序中的接口
  下载代码示例   许多开发人员可能都将 Silverlight 视为以 Web 为中心的技术,但实际上,它已经成为构建任何应用程序的优秀平台。
918 0
下一篇
无影云桌面