2017-08-17 6 views
-1

MVVMに基づくUsercontrolを作成しました。ウィンドウ(例えば、MainWindow.xaml)がこのUsercontrolを呼び出すと、このUserControlのビューは、ノード、子ノードおよびボタン( 'ok'など)を含むツリービューを有する。ユーザは、ツリービュー内のノードを選択し、ビュー上の「OK」ボタンを押す。私は、View.xaml.cs.xのツリービューの選択されたノードを読むことができました。 View.xaml.csで依存関係プロパティを作成して、選択したツリービュー項目を保存しました。 mainwindow.xaml.csでは、私は自分のusercontrolをインスタンス化し、依存関係プロパティを呼び出しています。 usercontrol.valueここで、valueはビュー内の依存関係プロパティです。 全体的な考え方は、ユーザーがツリービューノードを選択してOKを押すと、ビューが閉じて、選択したツリービュー項目の値がウィンドウに表示されます。ビューが閉じられると、ビューからメインウィンドウに値を渡します。

問題は、私はビューを閉じると、依存関係プロパティの値は、私はWPFに新しいです

を迷子にし、nullがウィンドウに返されています。

Window.xaml

<Grid> 
    <view:SystemExplorerView x:Name="MyView"></view:SystemExplorerView> 
</Grid> 

Window.xaml.cs

public object m_myValue; 
    public object myValue { 
     get { return m_myValue; } 
     set 
     { 
      m_myValue = value; 
      OnPropertyChanged("myValue"); 
     } 
    } 
public Window1() 
     { 
      InitializeComponent(); 
      myValue = MyView.Value; 
     } 

View.xaml.cs

public static readonly DependencyProperty ValueProperty = 
      DependencyProperty.Register("Value", typeof(object), typeof(SystemExplorerView), 
       new PropertyMetadata(null)); 
    public SystemExplorerView() 
     { 
      InitializeComponent(); 
     } 
public object Value 
     { 
      get { return (object)GetValue(ValueProperty); } 
      set 
      { 
       SetValue(ValueProperty, value); 

      } 
     } 
private void OKbtnclk(object sender, RoutedEventArgs e) 
     { 
      Value = myTreeView.SelectedItem; 
      Window.GetWindow(this).Close(); 
     } 
+0

コードはかなり大きいです、私はあなたがより多くの情報が必要な場合は私に知らせてください、それの一部を掲載しています。 – Smallestearth

+0

"MVVMに基づいて"あなたのUserControl以来、あなたは依存関係プロパティを使用する必要はありません。あなたのデータをViewModelに保存し、それを操作してください! – Rekshino

+0

ViewModelに保存した場合、ViewModelからMainWindowにプロパティを渡す方法は、MVVMルールを破ることはありませんか?私はまだこのようなことを学んでいます – Smallestearth

答えて

0

あなたかもしれませんCCESS Closingイベントハンドラでプロパティ:背後

<Window ... Closing="Window_Closing"> 
    ... 
</Window> 

コード:

private void Window_Closing(object sender, CancelEventArgs e) 
{ 
    myValue = MyView.Value; 
} 
関連する問題