Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 关闭视图时,将值从视图传递到主窗口_C#_Wpf_Xaml_Mvvm_Treeview - Fatal编程技术网

C# 关闭视图时,将值从视图传递到主窗口

C# 关闭视图时,将值从视图传递到主窗口,c#,wpf,xaml,mvvm,treeview,C#,Wpf,Xaml,Mvvm,Treeview,我已经做了一个基于MVVM的用户控件。一个窗口(例如MainWindow.xaml)调用此Usercontrol,此Usercontrol的视图有一个包含节点、子节点和按钮的树状视图(“ok”等)。用户在树状视图中选择一个节点并按下视图上的“ok”按钮。我可以在View.xaml.cs中读取树视图的选定节点。我已在View.xaml.cs中创建了依赖项属性,以保存选定的treeview项。在mainwindow.xaml.cs中,我正在实例化我的usercontrol并调用依赖属性,例如user

我已经做了一个基于MVVM的用户控件。一个窗口(例如MainWindow.xaml)调用此Usercontrol,此Usercontrol的视图有一个包含节点、子节点和按钮的树状视图(“ok”等)。用户在树状视图中选择一个节点并按下视图上的“ok”按钮。我可以在View.xaml.cs中读取树视图的选定节点。我已在View.xaml.cs中创建了依赖项属性,以保存选定的treeview项。在mainwindow.xaml.cs中,我正在实例化我的usercontrol并调用依赖属性,例如usercontrol.value,其中value是视图中的依赖属性。 总体思路是,当用户选择treeview节点并按ok时,视图应该关闭,所选treeview项目的值将根据窗口进行调整

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

我是WPF的新手

Window.xaml

<Grid>
    <view:SystemExplorerView x:Name="MyView"></view:SystemExplorerView>
</Grid>
View.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;
        }
    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();
        }

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

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

代码相当大,我已经发布了一些,如果您需要更多信息,请告诉我。因为您的UserControl“基于MVVM”,所以您不需要使用dependency属性。将数据存储在ViewModel中并使用它进行操作!如果我存储在ViewModel中,那么如何将属性从ViewModel传递到主窗口,它是否违反了MVVM规则?我仍在学习这方面的知识,请参见C#MVVM摘要和完整示例@Smallestearth不要听取这里关于StackOverflow的所有建议。依赖项属性正是UserControls的正确方法。UserControl通常不应有任何“自己的”视图模型。而是在实例化控件时将其依赖项属性绑定到视图模型属性。
private void Window_Closing(object sender, CancelEventArgs e)
{
    myValue = MyView.Value;
}