Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.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

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# 如何将UI元素强制转换为视图模型_C#_Wpf - Fatal编程技术网

C# 如何将UI元素强制转换为视图模型

C# 如何将UI元素强制转换为视图模型,c#,wpf,C#,Wpf,我有一个视图模型 public class TreeViewModel { public ObservableCollection<NodeViewModel> Items { get; set; } } public class NodeViewModel { public string Id { get; set; } public string Name { get; set; } public ObservableCollection<

我有一个视图模型

public class TreeViewModel
{
    public ObservableCollection<NodeViewModel> Items { get; set; }
}

public class NodeViewModel
{
    public string Id { get; set; }
    public string Name { get; set; }
    public ObservableCollection<NodeViewModel> Children { get; set; }
}

如何使GetNearestContainer工作?

您可以通过访问
DataContext
属性获取底层源代码,但它是在FrameworkElement上声明的,因此您可以直接从TreeViewItem对象获取它

此外,您似乎希望递归地获取TreeViewItem,因此首先添加此实用程序方法以获取TreeViewItem:

private static Parent FindParent<Parent>(DependencyObject child)
    where Parent : DependencyObject
{
    DependencyObject parentObject = child;
    parentObject = VisualTreeHelper.GetParent(parentObject);

    //check if the parent matches the type we're looking for
    if (parentObject is Parent || parentObject == null)
    {
        return parentObject as Parent;
    }
    else
    {
        //use recursion to proceed with next level
        return FindParent<Parent>(parentObject);
    }
}
私有静态父FindParent(DependencyObject子对象)
其中父对象:DependencyObject
{
DependencyObject parentObject=子对象;
parentObject=VisualTreeHelper.GetParent(parentObject);
//检查父项是否与我们要查找的类型匹配
if(parentObject为Parent | | parentObject==null)
{
将parentObject返回为父对象;
}
其他的
{
//使用递归继续下一个级别
返回FindParent(parentObject);
}
}
然后将方法更改为:

private NodeViewModel GetNearestContainer(UIElement element)
{
    // Walk up the element tree to the nearest tree view item.
    TreeViewItem UIContainer = FindParent<TreeViewItem>(element);
    NodeViewModel NVContainer = null;

    if (UIContainer != null)
    {
        NVContainer = UIContainer.DataContext as NodeViewModel;
    }
    return NVContainer;
}
私有节点设备模型GetNearestContainer(UIElement)
{
//沿着元素树走到最近的树视图项。
TreeViewItem UIContainer=FindParent(元素);
NodeViewModel NVContainer=null;
if(UIContainer!=null)
{
NVContainer=UIContainer.DataContext作为节点设备模型;
}
返回集装箱;
}
private NodeViewModel GetNearestContainer(UIElement element)
{
    // Walk up the element tree to the nearest tree view item.
    TreeViewItem UIContainer = FindParent<TreeViewItem>(element);
    NodeViewModel NVContainer = null;

    if (UIContainer != null)
    {
        NVContainer = UIContainer.DataContext as NodeViewModel;
    }
    return NVContainer;
}