【发布时间】:2012-02-13 07:59:54
【问题描述】:
我正在尝试弄清楚如何准确确定应该在 PropertyChanged 事件中为下面的 TextBlock 的 Text 属性使用什么属性名称。
<TreeView ItemsSource="{Binding PrimitiveNodes}">
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}"/>
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}"/>
<Setter Property="FontWeight" Value="Normal" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="FontWeight" Value="Bold" />
</Trigger>
</Style.Triggers>
</Style>
</TreeView.ItemContainerStyle>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding PrimitiveNodes}">
<TextBlock PreviewMouseLeftButtonDown="TextBlock_PreviewMouseLeftButtonDown" ContextMenu="{StaticResource TreeViewItemContextMenu}" PreviewMouseRightButtonDown="TextBlock_PreviewMouseRightButtonDown"
Text="{Binding Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
这是我用于 Text 属性的代码。
// Called out in the Name property when it is set
this.OnPropertyChanged(System.Windows.Controls.TextBlock.TextProperty.Name);
这里是 OnPropertyChanged 函数
public void OnPropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
从后面的代码更改时,IsSelected 和 IsExpanded 属性都会正确更新。 Text 属性却没有。我尝试在 Name 属性更新时将 null 传递给 OnPropertyChanged(从而强制所有属性更新)并且效果很好, TextBlock 的 Text 属性已正确更新为新值。所以我怀疑也许我在更新 TextBlock 的 Text 属性时将错误的字符串作为 propertyName 传递,但我'不确定正确的属性名称应该是什么,或者我将如何弄清楚它。有什么想法吗?
谢谢, 克雷格
【问题讨论】:
-
当“Name”属性改变时,PropertyChangedEventArg的propertyName应该是......好吧......“Name”:-)它的目的是绑定到'忘记'属性在哪里可能会被绑定。
标签: wpf xaml binding inotifypropertychanged