2017-08-17 73 views
-1

我已经基于MVVM创建了一个UserControl。一个窗口(例如MainWindow.xaml)调用这个Usercontrol,这个Usercontrol的View有一个包含节点,子节点和按钮('ok'等等)的树形视图。用户在树形视图中选择一个节点,然后按视图上的“确定”按钮。我可以在View.xaml.cs中读取树视图的选定节点。我在View.xaml.cs中创建了依赖项属性来保存选定的树视图项目。在mainwindow.xaml.cs中,我实例化了我的usercontrol并调用了依赖属性,例如usercontrol.value其中value是View中的依赖项属性。 总体思路是,当用户选择树视图节点并按下确定时,视图应该关闭,并且所选择的树视图项的值被设置为窗口。当视图关闭时,将视图中的值传递给主窗口

问题是,当我关闭视图的依赖属性的值丢失和空返回到窗口

我是新来WPF。

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

由于您的UserControl“基于MVVM”,因此您不需要使用依赖项属性。将数据存储在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; 
}