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;
}