【发布时间】:2017-10-05 17:46:46
【问题描述】:
我正在尝试在文本块中显示选定的树视图项目。这是我的 XAML 代码
<Style TargetType="{x:Type TreeViewItem}">
<Style.Triggers>
<Trigger Property="IsSelected" Value="true">
<Setter Property="vm:HLViewModel.SelectedNode" Value="{Binding ElementName="tree",Path=SelectedItem}"/>
</Trigger>
</Style.Triggers>
</Style>
这是我试图显示所选项目的文本块
<TextBlock Text="{Binding myText}"/>
我创建了附加的依赖属性,它将在触发 Treeview 的 IsSelected 属性时设置。如何在回调函数中设置 myText 的值?
public class HLViewModel : DependencyObject
{
public myText{get;set;}
public static object GetSelectedNode(DependencyObject obj)
{
return (object)obj.GetValue(SelectedNodeProperty);
}
public static void SetSelectedNode(DependencyObject obj, object value)
{
obj.SetValue(SelectedNodeProperty, value);
}
public static readonly DependencyProperty SelectedNodeProperty =
DependencyProperty.RegisterAttached("SelectedNode", typeof(object), typeof(HLViewModel), new PropertyMetadata("def",SelectedNode_changed));
private static void SelectedNode_changed(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
// wanna set of myText property value here
}
【问题讨论】:
-
myText是一个实例属性。你在任何地方都有HLViewModel的实例吗?它在哪里?我没有看到您正在创建的任何地方。什么是“想要的”? -
您是否猜测在 TreeViewItem 上设置附加属性会创建定义附加属性的类的实例?事实并非如此。您正在将该属性添加到 TreeViewItem。
-
@EdPlunkett 此代码仅用于测试。我的目标是获取树视图的选定项。需要 TextBlock 来显示在树视图中选择的内容。重复它只是为了测试。我无法在静态函数中设置 myText 值,因为我们不知道 HLViewModel 类的实例。 d 因为 HLViewModel 给出了 null。 d 来自 TreeViewItem。
-
你为什么使用附加属性?我非常了解 WPF,你所做的对我来说毫无意义。如果要在文本块中显示所选项目,只需执行以下操作:
<TextBlock Text="{Binding ElementName=tree,Path=SelectedItem}" />。我知道你正在测试。我明白那个。但这没关系。代码仍然没有任何意义。 -
@EdPlunkett 我有 Level 类的可观察集合类型,其中有另一个可观察的 Room 集合类型。 TreeView 将 Levels 显示为父级,将其下的房间显示为子级。当我单击级别时,我需要获取它的子级并使用房间的属性进行一些计算并在任何 UI 元素上显示结果。没关系,它是文本框、数据网格或其他东西。
标签: c# wpf xaml treeview dependency-properties