多次调用WPF getter
我有一个简单的wpf窗口:多次调用WPF getter,wpf,xaml,ironpython,getter,Wpf,Xaml,Ironpython,Getter,我有一个简单的wpf窗口: <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> <StackPanel> <TextBox AcceptsReturn="True" Text="{Binding A}" /><!-- TextBox1 --> <TextBox AcceptsReturn="True" Te
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<StackPanel>
<TextBox AcceptsReturn="True" Text="{Binding A}" /><!-- TextBox1 -->
<TextBox AcceptsReturn="True" Text="{Binding B}" /><!-- TextBox2 -->
<TextBox AcceptsReturn="True" Text="{Binding C}" /><!-- TextBox3 -->
</StackPanel>
</Window>
,其中ViewModel是INotifyPropertyChanged的C#实现
现在,当我打开此窗口时,三个TextBox
es包含以下内容:
(TextBox1)
A getter call 1
B getter call 1
C getter call 1
A getter call 2
(TextBox2)
A getter call 1
B getter call 1
C getter call 1
A getter call 2
A getter call 3
B getter call 2
C getter call 2
B getter call 3
(TextBox3)
A getter call 1
B getter call 1
C getter call 1
A getter call 2
A getter call 3
B getter call 2
C getter call 2
B getter call 3
A getter call 4
B getter call 4
C getter call 3
C getter call 4
这里有一个主要的问题困扰着我:为什么每个getter都被调用,而只有一个getter应该被调用来获取单个绑定的内容?为什么每个绑定属性的getter调用两次?这意味着,为什么每次属性访问都会调用每个getter,然后再次调用所需属性的实际getter
更糟糕的是:如果从xaml中删除第二个(甚至第三个)TextBox
,则剩余的TextBox
es中的文本不会更改,这意味着将调用未显示属性的获取程序
有人能解释一下发生了什么以及如何防止这种行为吗?getter应该不会改变对象的状态。基于这一假设,各种服务都可以自由地呼叫它们。例如,当窗口需要重新绘制时, < P>我可以想象,DLR经常调用吸气剂。WPF通常也使用getter进行类型检测。如果在编译时不知道该类型,则只能这样解析。我在C#中尝试了“相同的代码”,但在那里一切都正常。
(TextBox1)
A getter call 1
B getter call 1
C getter call 1
A getter call 2
(TextBox2)
A getter call 1
B getter call 1
C getter call 1
A getter call 2
A getter call 3
B getter call 2
C getter call 2
B getter call 3
(TextBox3)
A getter call 1
B getter call 1
C getter call 1
A getter call 2
A getter call 3
B getter call 2
C getter call 2
B getter call 3
A getter call 4
B getter call 4
C getter call 3
C getter call 4