아래 TextBlock의 Text 속성에 대해 PropertyChanged 이벤트에서 사용되는 속성 이름을 정확하게 결정하는 방법을 알아 내려고합니다.PropertyChanged 이벤트의 올바른 PropertyName 결정
<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);
여기 뒤에있는 코드에서 변경 될 때
public void OnPropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
모두 에 isSelected 및 으로 IsExpanded를 올바르게 업데이트 OnPropertyChanged를 기능을합니다. 그러나 텍스트 속성은 그렇지 않습니다. 나는 널에이 이름 속성을 업데이트 할 때 (따라서 업데이트 할 모든 속성을 강제)하고는 TextBlock의의 텍스트 속성을 올바르게 새 값으로 업데이트하고, 잘 작동을 OnPropertyChanged를 통과했습니다. 그래서 어쩌면 내가 TextBlock의의 텍스트 속성의 propertyName 형식로 잘못된 문자열을 전달하고있어이 업데이트 될 때 의심,하지만 난 올바른 속성 이름이 있어야 할 모르겠어요 또는 어떻게 것 그것을 알아내는 것. 어떤 아이디어?
감사합니다, 크레이그
당신은Name
재산에하여 PropertyChanged 이벤트를 발생함으로써
this.OnPropertyChanged("Name");
Name
라고 변경지고 속성의 이름 때문에, 그것을 "Name"
을 통과해야
"Name"속성이 변경되면 PropertyChangedEventArg의 propertyName은 ...이어야합니다. ... "Name":-) 속성을 바인딩 할 수있는 곳을 '잊어 버리는'것이 Binding의 목적입니다. – GameAlchemist