【发布时间】:2011-04-16 09:21:07
【问题描述】:
我有一个具有 DefaultText 属性的自定义转换器。如果字符串为空或为空,我的转换器所做的只是返回 DefaultText。我似乎无法让它工作。这就是我所拥有的。这是转换器类。
public class DisplayValueConverter : DependencyObject, IValueConverter
{
public static readonly DependencyProperty DefaultTextProperty = DependencyProperty.Register( "DefaultText",
typeof ( string ),
typeof ( DisplayValueConverter ) );
public string DefaultText
{
get { return ( string ) GetValue( DefaultTextProperty ); }
set { SetValue( DefaultTextProperty, value ); }
}
public object Convert( object value, Type targetType, object parameter, CultureInfo culture )
{
string empty = ( parameter != null ) ? parameter as string : DefaultText;
return ( value != null && !string.IsNullOrEmpty( value.ToString().Trim() ) ) ? value.ToString() : empty;
}
public object ConvertBack( object value, Type targetType, object parameter, CultureInfo culture )
{
return null;
}
}
这是我投入使用的 xaml。
<TextBox Grid.Column="1"
Grid.Row="3"
VerticalAlignment="Center"
Margin="0,0,10,0" >
<TextBox.Text>
<Binding Path="DataSource.Payee"
Mode="TwoWay"
NotifyOnSourceUpdated="True"
NotifyOnTargetUpdated="True"
NotifyOnValidationError="True"
ValidatesOnDataErrors="True"
UpdateSourceTrigger="PropertyChanged">
<Binding.Converter>
<k:DisplayValueConverter DefaultText="{Binding ElementName=This, Path=Test, Mode=TwoWay}" />
</Binding.Converter>
<Binding.ValidationRules>
<vr:RequiredField Label="Payee" />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
我已验证 DataContext 有一个对象,并且 Path 有效。所以我不确定我做错了什么。
【问题讨论】:
-
@rossisdead - 什么都没有。我期待数据绑定引擎首先绑定转换器属性 DefaultText,然后尝试绑定路径 DataSource.Payee 上的文本属性,但没有任何反应。
-
您的 DefaultText 绑定中是否指定了一个名为“This”的元素?
-
我认为您的问题是您期望 DefaultText 属性会导致调用转换器的 Convert 方法。这不会发生,因为它与 TextBox 自己的绑定无关。最好设置 TextBox 的绑定的 TargetNullValue 或 DefaultValue 或这些属性之一。
-
首先检查断点是否命中。其次,检查输出窗口中是否有任何绑定错误。正如理智的 Wonko 所说,确保“This”在您的上下文中。
-
没有命中断点,但是有一个名为“This”的元素。就好像绑定引擎在尝试对属性 DefaultText 进行数据绑定之前调用了 convert 方法。