我想使用ComboBox显示Contact3,如果Contact3为null,则使用空白。
我的ViewModel有一个CurrentSample属性,它是包含下面控件的堆栈面板的DataContext。
当CurrentSample.Contact3!= null时,绑定工作正常。
当CurrentSample更改为带有Contact3 = = null的Sample时,TextBox绑定工作正常,但ComboBox会记住最后一个非null值。
我尝试创建一个简单的示例来演示行为,但工作正常!在我的简单示例中,当CurrentSample.Contact3 == null时,组合框为空。
我的完整程序正在使用EF代理。当它出错时,绑定输出会告诉我我的DataObject是一个代理。
我尝试过将OurPeople2作为集合和CollectionViewSource,并使用和不使用null条目。
请记住,只有你可以从(另一个)丑陋的kludge中保存这个项目......昵称(在.Net 4.5中)
<TextBox Text="{Binding Path=Contact3.Surname, Mode=OneWay}"/>
<ComboBox
ItemsSource="{Binding Source={StaticResource Locator}, Path=Main.OurPeople2}"
SelectedItem="{bindings:ChilliBinding Path=Contact3}"
DisplayMemberPath="Surname"
IsSynchronizedWithCurrentItem="True" />
行。问题是这个。 ChilliBinding是一个包括几个参数的便利类。
public class ChilliBinding:Binding
{
public ChilliBinding():base()
{
Mode=BindingMode.TwoWay;
UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
ValidatesOnDataErrors = true;
NotifyOnValidationError = true;
TargetNullValue = "";
}
}
TargetNullValue允许用户在文本框中提供空字符串以指定空值。不适用于CombobBox。也许绑定尝试将viewmodel中的null值转换为“”,然后无法在组合框中找到该值。
我引入了一个新的便利类ChilliBindingForCombo,它使TargetNullValue失效。顺便说一句,将组合的值设置为null,我不需要在组合框中有一个空值,因为我有一个UserControl包含一个标签,组合框和一个“set combo to null”按钮。 / p>
答案 0 :(得分:0)
使用FallbackValue
这样的结果:<TextBox Text="{Binding Path=Contact3.Surname, Mode=OneWay}, FallbackValue={x:Null}"/>