我已经使用绑定多次,但这让我感到惊讶。 在TabControl的资源中,我定义了:
<DataTemplate DataType="{x:Type local:ScreenViewModel}">
<Grid>
<Grid.Resources>
<local:converter x:Key="conv"/>
</Grid.Resources>
<di:DisplayView Ime="{Binding Name, Converter={StaticResource conv}, Mode=OneWay}"/>
<TextBlock Text="{Binding Name, Converter={StaticResource conv}, Mode=OneWay}"/>
</Grid>
</DataTemplate>
转换器定义为:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value;
}
仅用于调试绑定过程。
di:DisplayView具有字符串类型的Ime依赖项属性和 实现了INotifyPropertyChanged的local:ScreenViewModel类具有要绑定到的Name属性。
现在,此代码的问题是,当我将断点放在“ conv”的Convert方法中时,我看到断点被击中两次。首先,在“名称”中设置了预定义的字符串值,第二次则是空字符串。即使我删除TextBlock绑定,我仍然会得到空字符串作为值,但是即使我删除di:DisplayView,也可以正常工作。
我应该提到UserControl是在另一个命名空间中定义为ClassLibrary的。
WPF的奇怪行为,不是吗?