【问题标题】:WPF Mvvm Light - Checkbox and updating entityWPF Mvvm Light - 复选框和更新实体
【发布时间】:2014-08-20 07:38:44
【问题描述】:

我的 WPF 应用程序出现了一些奇怪的行为。为什么这个xaml会选中或取消选中复选框:

    <CheckBox IsChecked="{Binding Driver.IsActive, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

如果我更新一条记录,它会起作用。它将输入 true 或 false 并更新数据库中为 BIT 数据类型的字段。如果我尝试为表创建新记录,则在尝试插入数据库时​​它不起作用。它会抛出一个实体验证错误,上面写着“false”是不允许的。

【问题讨论】:

  • false BIT ?
  • 显然不是,但为什么它最初用于选中/取消选中该框?
  • 隐式转换器是我的猜测......我记得我过去在Checkboxes 上遇到过一些问题......
  • 现在是个愚蠢的问题.. 但是 C# 中的 bool 数据类型支持 1/0 吗?
  • 如果你尝试:bool a_bool = 1 它会抱怨。您可以使用 Boolean.Parse(string_here); ,但 string_here 应该是“true”或“false”

标签: wpf data-binding checkbox wpf-controls mvvm-light


【解决方案1】:

标准 MVVM-Way:在您记录的 ViewModel 中,您应该在 setter 中有一个类型为 bool 的属性,然后您可以将 bool 转换为 int、bit 或任何您喜欢的.在 getter 中,您必须将模型类型转换为 bool

不那么标准的方式:如果您直接绑定模型,那么您可以考虑使用IValueConverter 实现来转换为您需要的数据类型。

“标准”和“不那么标准”方式的区别是基于绑定的。虽然,您可以直接绑定模型 - 在某些情况下这很好 - 添加额外的 ViewModel 可以让您在处理更改时具有更大的灵活性 - 无论是在视图中还是在模型中。

但是,根据您的数据访问方法,bit 和 bool 之间的映射将自动执行(例如 EntityFramework)。为此,您需要将您的字段声明为 bool,并将底层数据库字段声明为 bit。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多