附加行为无法在可重复使用的窗口中工作

时间:2015-08-24 14:52:37

标签: wpf mvvm modal-dialog

我有一个使用的对话框,我简单无法理解为什么它不会绑定。

我使用Joe White的DialogCloser,来自answer

public static  class DialogCloser
{
    public static readonly DependencyProperty DialogResultProperty =
        DependencyProperty.RegisterAttached(
            "DialogResult",
            typeof(bool?),
            typeof(DialogCloser),
            new PropertyMetadata(DialogResultChanged));

    private static void DialogResultChanged(
        DependencyObject d,
        DependencyPropertyChangedEventArgs e)
    {
        var window = d as Window;
        if (window != null)
            window.DialogResult = e.NewValue as bool?;

    }
    public static void SetDialogResult(Window target, bool? value)
    {
        target.SetValue(DialogResultProperty, value);
    }
}

我只在DialogWindow.xml中使用它

<Window x:Class="ATS.Views.Common.DialogWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    Title="WindowDialog" 
    WindowStyle="SingleBorderWindow" 
    WindowStartupLocation="CenterOwner" SizeToContent="WidthAndHeight"
    xmlns:xc="clr-namespace:ATS.Views.Common"
    xc:DialogCloser.DialogResult="{Binding DialogResult}"
    ResizeMode="NoResize">
<ContentPresenter x:Name="DialogPresenter" Content="{Binding .}"></ContentPresenter>

自我绑定是在我想用于对话框窗口的抽象类上。

public class DialogViewModel : BaseViewModel
{
    private bool? dialogResult;
    public bool? DialogResult
    {
        get
        {
            return dialogResult;
        }
        set
        {
            dialogResult = value;
            NotifyPropertyChange("DialogResult");
        }
    }
}

我用ViewModel打开对话框:

public bool? ShowDialog(string title, DialogViewModel dataContext)
    {
        var win = new DialogWindow();
        win.Title = title;
        win.DataContext = dataContext;

        return win.ShowDialog();    
    }

现在似乎发生了什么,即使我创建新的对话框窗口,它自己的绑定只会被添加一次,因此它只能在创建的第一个对话框上工作。

由于相同的命名空间和名称,它是否与绑定到一个使得绑定不起作用的abstact类有关?

编辑: 使用Mark处理对话框的方式结束,可以找到here

0 个答案:

没有答案