1

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

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

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

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

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

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

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

请记住,只有您可以从(另一个)丑陋的杂物中拯救这个项目......尼克(在.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 未设置。顺便说一句,要将组合的值设置为 null,我不需要在组合框中有一个空值,因为我有一个包含标签、组合框和“将组合设置为 null”按钮的 UserControl。

4

1 回答 1

0

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

祝你好运。

于 2013-10-04T18:24:03.757 回答