关闭视图时,将值从View传递到Mainwindow

时间:2017-08-17 05:50:00

标签: c# wpf xaml mvvm treeview

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

问题是,当我关闭视图时,依赖项属性的值会丢失并且null返回到窗口

我是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();
        }

1 个答案:

答案 0 :(得分:0)

您可以在Closing事件处理程序中访问该属性:

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

代码背后:

private void Window_Closing(object sender, CancelEventArgs e)
{
    myValue = MyView.Value;
}