WPF 组合框绑定:记住最后一个值,而不是显示 null

本文关键字:null 显示 最后一个 组合 绑定 WPF | 更新日期: 2023-09-27 18:33:53

我想使用组合框来显示 Contact3,如果 Contact3 为空,则为空。

My ViewModel 有一个 CurrentSample 属性,它是包含以下控件的堆栈面板的 DataContext。

当 CurrentSample.Contact3 != null 时,绑定工作正常。

当 CurrentSample 更改为具有 Contact3==null 的示例时,文本框绑定工作正常,但组合框会记住最后一个非 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 允许用户在文本框中提供空字符串以指定空值。不适用于组合框。也许绑定尝试将视图模型中的 null 值转换为 ",然后在组合框中找不到该值。

我引入了一个新的便利类ChilliBindingForCombo,它没有设置TargetNullValue。顺便说一句,要将组合的值设置为 null,我不需要在组合框中有一个空值,因为我有一个包含标签、组合框和"将组合设置为 null"按钮的用户控件。

WPF 组合框绑定:记住最后一个值,而不是显示 null

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

祝你好运。