0

我创建一个依赖属性来关闭视图模型中的视图,

依赖属性:

  public static class WindowBehaviors 
  {      
     public static readonly DependencyProperty IsOpenProperty =
              DependencyProperty.RegisterAttached("IsOpen"
             , typeof(bool),
             typeof(WindowBehaviors),
             new UIPropertyMetadata(false, IsOpenChanged));

    private static void IsOpenChanged(DependencyObject   obj,DependencyPropertyChangedEventArgs args)
    {
        Window window = Window.GetWindow(obj);

        if (window != null && ((bool)args.NewValue))
            window.Close();
    }


    public static bool GetIsOpen(Window target)
    {
        return (bool)target.GetValue(IsOpenProperty);
    }

    public static void SetIsOpen(Window target, bool value)
    {
        target.SetValue(IsOpenProperty, value);
    }
}

并像这样在我的 xaml 中使用它:

<window
...
Command:WindowBehaviors.IsOpen="True">

它工作得很好,但是当我想将它绑定到 viewModel 中的属性时,它不起作用,我猜,它不起作用,因为我稍后在 xaml 中定义了资源。

在xml中:

 <Window.Resources>
     <VVM:myVieModel x:Key="myVieModel"/>
 </Window.Resources>

我不知道我该怎么办,我应该把这个放在哪里:

Command:WindowBehaviors.IsOpen="{binding Isopen}"
4

3 回答 3

0

您需要为绑定所在的范围绑定数据上下文。通常这在 XAML 中相当高,通常是表单或控件中的第一个元素。

在您的情况下,作为静态资源的数据上下文应该可以工作:

<grid DataContext="{StaticResource myVieModel}">
    <!-- the code with the binding goß into here -->
</grid>

实际上,这与ebattulga建议的相同,只是 XAML 方式(没有后面的代码)。

于 2012-03-05T23:51:50.410 回答
0

感谢您的帮助,我修复了它,这是我的解决方案,我曾经使用 MVVMToolkit,但现在我正在使用 MVVMlight,正如您在 MVVMLight 中所知道的那样,我们只需在 App.xaml 中定义应用程序资源。所以我们可以绑定所有窗口的属性很简单,希望这可以帮助一些有同样问题的人!

应用程序.xaml

  <Application.Resources>
    <!--Global View Model Locator-->
    <vm:ViewModelLocator x:Key="Locator"
                         d:IsDataSource="True" />
  </Application.Resources>

并在窗口(视图)中

DataContext="{Binding DefaultSpecItemVM, Source={StaticResource Locator}}"

它完美无缺。:D

于 2012-03-06T09:13:38.170 回答
0
    public MainWindow()
            {
                InitializeComponent();

// DO THIS
                this.DataContext = Resources["myVieModel"];

            }
于 2012-03-05T11:09:30.680 回答