2017-10-12 116 views
-1

我有两个WPF窗口: - 一个显示数据列表 - 另一个显示当点击按钮列表中的特定数据的详细视图双向模式绑定方案为null或空数据传回源

enter image description here

enter image description here

实际问题: 当我移除或删除从文本框或基本上字符串值对车类型数据 - “空”值被反射回的数据的列表。 文本框正在使用Twoway模式。 但是,如果我删除或清空包含枚举数据或整型数据的文本框,则空值不会反映回列表,只有数据在字符串中时才会出现问题。

下面是数据的快照是从ListView的选择:

enter image description here

新建MVVM架构和WPF,请把它给我简单:|

+0

的'string'类型的行为似乎没什么问题。双向绑定意味着“文本框”中的值反映了“模型”中的值,反之亦然。至于'int'和'enum'值,它们是值类型并且具有默认值0,这可能是为什么你没有看到反映的变化。 –

+0

请给我们看一些代码。例如你的枚举! –

+0

@FelixD。我不认为发布枚举代码将在我的数据层有所作为,并且与我的MVVM UI空间 – IteratioN7T

回答

0

您不能将int属性或Country属性设置为空的string

您可以将其设置为null如果属性定义为可空:

public class Car 
{ 
    public int? Id { get; set; } 
    public string Name{ get; set; } 
    public int? Price { get; set; } 
    public Country? Country { get; set; } 
    public string Type { get; set; } 
} 
0

看来你尝试从视图模型分离视图(改变看法,但希望保持视图模型性质不变),但是这只是一个错误的方法。

如果您有一个持久数据的列表,并且想要编辑一个项目,而不必在保存之前反映列表中的编辑,那么您需要具有单独数据的单独视图模型。 根据列表项获取初始值,让用户编辑数据,并在保存时将已更改的数据明确写回列表项。

如果您希望避免手动将数据手动复制到编辑器视图模型或从编辑器视图模型中手动复制数据,像AutoMapper这样的工具可以在一定程度上简化编辑器项目的创建。

+0

非常感谢您的建议 - 我会尝试你的方式..也看看automapper – IteratioN7T

0

终于找到了我正在寻找的解决方案;正如我在OP中所说的问题是,无论什么时候我改变绑定到文本框的属性的值,数据都会反射回来(即使数据是空白的空白),无论发生什么 - 您点击更新或取消或任何按钮窗口关闭窗体。

SOLUTION:

我设置UpdateSourceTrigger明确

默认UpdateSourceTrigger设置为默认这意味着属性中的值更改反映回源。

UpdateSourceTrigger设置为Explicit时,基本上意味着即使模式为TwoWay或OneWayToSource,绑定值的更改也不会发送回源。

检查here什么MSDN说,关于Binding.UpdateSourceTrigger物业

+0

老实说,你所谓的解决方案不是很有说服力。至少如果您尝试开发MVVM方式,则不应阻止将不完整/错误的数据传输到视图模型。如果数据保留在视图中而没有传输,则您无法获得模型验证。 – grek40

+0

@ grek40你是对的我需要实施一个验证;不过,只要我可以手动管理数据回流 - 这种解决方案正在帮助我! – IteratioN7T