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