您的位置:首页 > 运维架构

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

2012-05-02 08:44 375 查看
转自/article/5020521.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
{ [/code]
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" [/code]
x:Class="AttachPropertyInMVVM.Views.ChildView"
AttachPropertyInMVVM:ChildwindowDialogResult.DialogResult="{Binding DialogResult,Mode=OneWay}"/>
将该属性绑定至ViewModel中定义的DialogResult属性就可以了,具体View与ViewModel如何交互,请参考下面的源码。

代码下载:AttachPropertyInMVVM
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: