【发布时间】: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。
【问题讨论】: