WPF Combobox绑定:记住最后一个值而不是显示null

时间:2013-10-04 18:21:53

标签: c# .net wpf combobox

我想使用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>

1 个答案:

答案 0 :(得分:0)

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

祝你好运。