WPF获取父类控件信息

xtzy89 2020-09-16 04:49:58

点击"APTIV-07"时如何获取"Project_V3"的名称,现在只能获取上一级的名称,无法获得上上级。

XAML格式为:

<DockPanel.Resources>
<local:Data x:Key="MyList"/>

<HierarchicalDataTemplate DataType = "{x:Type local:Data}"
ItemsSource = "{Binding Path= Versions}">

<TextBlock Text="{Binding Path=ProjectName}"/>
</HierarchicalDataTemplate>

<HierarchicalDataTemplate DataType = "{x:Type local:Version}"
ItemsSource = "{Binding Path=Machines}">
<TextBlock Text="{Binding Path=Ver_Name}"/>
</HierarchicalDataTemplate>

<DataTemplate DataType="{x:Type local:Machine}">
<TextBlock Text="{Binding Path=MachineName}" MouseLeftButtonDown="TextBlock_MouseLeftButtonDown" />
</DataTemplate>
</DockPanel.Resources>

<Menu x:Name="menu" DockPanel.Dock="Top" VerticalAlignment="Top" Visibility="Collapsed"
GotKeyboardFocus="menu_GotKeyboardFocus"
LostKeyboardFocus="menu_LostKeyboardFocus"
ContextMenuOpening="menu_ContextMenuOpening">
<MenuItem Header="Project"
ItemsSource="{Binding Projects}" >
</MenuItem>
</Menu>


获取上级目录用的方法是:

public static T GetParent<T>(DependencyObject obj) where T : FrameworkElement
{
if (obj != null)
{
DependencyObject parent = VisualTreeHelper.GetParent(obj);
while (parent != null)
{
if (parent is T)
{
return (T)parent;
}
parent = VisualTreeHelper.GetParent(parent);
}
}
return null;
}

//获取上级
var parent = GetParent<StackPanel>(e.OriginalSource as DependencyObject);
string currentVersion = ((Version)parent.DataContext).Ver_Name;


有没有大神帮忙看下,如何获取上上级"Project_V3"这个字段,后边显示的时候需要用到。
...全文
12536 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
ziqi0716 2020-09-17
  • 打赏
  • 举报
回复
wpf是数据驱动UI的,vm不应该尝试去获取界面上的任何控件,而应考虑获取vm中的属性,对相应属性进行访问或者修改,而界面的变化依赖于vm中的属性值变化. 建议先看下mvvm设计模式,理解了就不会有这种复杂的耦合操作了. 如果达到一个目的很难,先考虑下是不是走错路了

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧