간단히 말해서 WPF 컨트롤에서 2 개의 종속성 속성을 만들고 다른 속성을 변경하기 위해 각 속성 변경 알림에 코드를 넣을 수 있습니다 (예 : PropA
변경 집합 PropB
및 PropB
변경 집합 PropA
).종속성 속성 재 입력 (또는 왜 작동합니까?)
나는 이것이 자신의 뒷면을 없애기를 기대하지만, WPF는 훌륭하게 처리하는 것으로 보인다. 그것은 실제로 내 목적에 매우 편리하지만 어디서나이 동작을 찾을 수는 없습니다.
무슨 일 이니? WPF 종속성 속성이 알림 시스템 가드를 reentrancy에 대해 변경합니까?
대표 코드는 다음과 같습니다
XAML :
<Window x:Class="WPFReentrancy1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<TextBox Text="{Binding PropB, UpdateSourceTrigger=PropertyChanged}"/>
</Grid>
</Window>
코드 숨김 속성 이를 변경 한 경우 그 콜백은 해고
public partial class MainWindow : Window
{
public string PropA
{
get { return (string)GetValue(PropAProperty); }
set { SetValue(PropAProperty, value); }
}
public static readonly DependencyProperty PropAProperty =
DependencyProperty.Register("PropA", typeof (string), typeof (MainWindow),new UIPropertyMetadata("0", PropAChanged));
public string PropB
{
get { return (string)GetValue(PropBProperty); }
set { SetValue(PropBProperty, value); }
}
public static readonly DependencyProperty PropBProperty =
DependencyProperty.Register("PropB", typeof (string), typeof (MainWindow), new UIPropertyMetadata("", PropBChanged));
private static void PropBChanged(DependencyObject lDependencyObject, DependencyPropertyChangedEventArgs lDependencyPropertyChangedEventArgs)
{
((MainWindow) lDependencyObject).PropA = (string) lDependencyPropertyChangedEventArgs.NewValue;
}
private static void PropAChanged(DependencyObject lDependencyObject, DependencyPropertyChangedEventArgs lDependencyPropertyChangedEventArgs)
{
((MainWindow) lDependencyObject).PropB =
double.Parse((string) lDependencyPropertyChangedEventArgs.NewValue).ToString("0.000");
}
public MainWindow()
{
InitializeComponent();
DataContext = this;
PropA = "1.123";
}
}
구체적인 대답을 가지고 있지만 있다고 가정하지 않는
다음 WPF를 고려하는 요소의 트리를 따라 순환 흐름과도 관련 속성을, 그냥 "저장을 "(구체적인 이벤트의 경우) 이미 노드를 통과하고 알림을 시작한 노드이므로 다시 한 번 만나면 건너 뜁니다. – Tigran