2013-10-04 35 views
1

我想使用组合框来显示联系人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,其中包含一个标签,组合框和一个“设置组合框为空”按钮。

回答

0

使用FallbackValue这样的:<TextBox Text="{Binding Path=Contact3.Surname, Mode=OneWay}, FallbackValue={x:Null}"/>

好运。

+0

谢谢,但没有奏效。顺便说一句,CollectionViewSource.CurrentItemChanged处理程序没有被调用,所以它甚至没有告诉组合框更改它的项目。我也有一个“将联系人3设置为空”按钮。这确实会更改属性,TextBox更新,但不会更改组合框。 – ajd

+0

AAGH。我在ChilliBinding中使用了TargetNullvalue。这允许用户清除文本框中的值,但似乎不适用于组合框。感谢您的关注,这促使我更仔细地看待...... – ajd

+0

不错!不仅仅是告诉你如何去做,而是你自己做! – Tico

相关问题