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でリソースを定義するため、動作しません。

xamlで:

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

そして私は私が何をすべきかわからない、私はこれをどこに置くべきか:

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

3 に答える 3

0
    public MainWindow()
            {
                InitializeComponent();

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

            }
于 2012-03-05T11:09:30.680 に答える
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.で一度アプリケーションリソースを定義するだけですウィンドウのプロパティは単純に、これが同じ問題を抱えている一部の人々に役立つことを願っています!!

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

于 2012-03-06T09:13:38.170 に答える