如何绑定到窗口的WPF依赖属性



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

dependencyProperty:

  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中定义了资源。

xaml:

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

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

Command:WindowBehaviors.IsOpen="{binding Isopen}"
    public MainWindow()
            {
                InitializeComponent();
// DO THIS
                this.DataContext = Resources["myVieModel"];
            }

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

在您的情况下,指向静态资源的数据上下文应该如下所示:

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

实际上,这和ebattulga建议的一样,只是XAML方式(没有代码隐藏)。

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

app.xaml

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

和在窗口(视图)

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

而且效果非常好D

相关内容

  • 没有找到相关文章

最新更新