我想使用组合框来显示联系人3,或者如果联系人3为空,则为空。WPF组合框绑定:记住上一个值而不是显示空值
我的ViewModel有一个CurrentSample属性,它是包含下面控件的堆栈面板的DataContext。
当CurrentSample.Contact3!= null时,绑定工作正常。
当CurrentSample更改为带有Contact3的样本== null时,TextBox绑定可以正常工作,但ComboBox会记住最后一个非null值。
我试着创建一个简单的例子来演示行为,但工作正常!在我的简单示例中,当CurrentSample.Contact3 == null时,组合框为空。
我的完整程序使用EF代理。当它即将出错时,绑定输出会告诉我,我的DataObject是一个代理。
我试过让OurPeople2有一个集合和一个CollectionViewSource,并且有和没有空条目。
请记住,只有你可以从(其它)丑杂牌......尼克保存这个项目(在.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中的空值转换为“”,然后在组合框中找不到该值。
我已经介绍了一个新的便捷类ChilliBindingForCombo,它使TargetNullValue未设置。顺便说一句,将组合值设置为空,我不需要在组合框中有一个空值,因为我有一个UserControl,其中包含一个标签,组合框和一个“设置组合框为空”按钮。
谢谢,但没有奏效。顺便说一句,CollectionViewSource.CurrentItemChanged处理程序没有被调用,所以它甚至没有告诉组合框更改它的项目。我也有一个“将联系人3设置为空”按钮。这确实会更改属性,TextBox更新,但不会更改组合框。 – ajd
AAGH。我在ChilliBinding中使用了TargetNullvalue。这允许用户清除文本框中的值,但似乎不适用于组合框。感谢您的关注,这促使我更仔细地看待...... – ajd
不错!不仅仅是告诉你如何去做,而是你自己做! – Tico