【问题标题】:WPF Combobox binding: remembers last value instead of displaying nullWPF Combobox 绑定:记住最后一个值而不是显示 null
【发布时间】:2013-10-04 18:21:53
【问题描述】:

我想使用 ComboBox 来显示 Contact3,如果 Contact3 为空,则显示为空白。

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

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

当 CurrentSample 更改为 Contact3==null 的 Sample 时,TextBox 绑定工作正常,但 ComboBox 会记住最后一个非空值。

我尝试创建一个简单的示例来演示该行为,但效果很好!在我的简单示例中,当 CurrentSample.Contact3==null 时,组合框为空白。

我的完整程序正在使用 EF 代理。当它即将出错时,绑定输出会告诉我我的 DataObject 是一个代理。

我尝试将 OurPeople2 设为一个集合和一个 CollectionViewSource,并尝试使用和不使用 null 条目。

记住,只有你才能从(另一个)丑陋的杂物中拯救这个项目...... nick(在 .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 允许用户在文本框中提供一个空字符串来指定一个空值。不适用于组合框。也许绑定试图将视图模型中的空值转换为“”,然后在组合框中找不到该值。

我引入了一个新的便利类 ChilliBindingForCombo,它使 TargetNullValue 未设置。顺便说一句,将组合的值设置为空,我不需要在组合框中有一个空值,因为我有一个包含标签、组合框和“将组合设置为空”按钮的 UserControl。

【问题讨论】:

    标签: c# .net wpf combobox


    【解决方案1】:

    像这样使用FallbackValue&lt;TextBox Text="{Binding Path=Contact3.Surname, Mode=OneWay}, FallbackValue={x:Null}"/&gt;

    祝你好运。

    【讨论】:

    • 谢谢,但这没有用。顺便说一句,CollectionViewSource.CurrentItemChanged 处理程序没有被调用,所以它甚至没有告诉组合框更改它的项目。我还有一个“将联系人 3 设置为空”按钮。这确实会更改属性,TextBox 会更新,但不会更改组合框。
    • AAGH。我在 ChilliBinding 中使用了 TargetNullvalue。这允许用户清除文本框中的值,但似乎不适用于组合框。感谢您的关注,这促使我更加仔细地寻找......
    • 不错!比教你怎么做更好,是你自己做!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-31
    • 1970-01-01
    • 2023-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多