我在 Visual Basic 和 C# 中都在 NET Framework 3.5 中维护一些旧的 WinForms,但我很难尝试绑定到 POCOs 数据类。
我得到了这个(使用 INotifyPropertyChanged):
public string DisplayUnits
{
get { return _displayUnits; }
set
{
_displayUnits = value;
NotifyChange("DisplayUnits");
}
}
public string SetUnit
{
get { return _setUnit; }
set
{
_setUnit = value;
NotifyChange("SetUnit");
}
}
设置 SetUnit 不是问题,因为我得到了这个:
ComboxBoxUnits.DataBindings.Add("SelectedItem", data, "SetUnit", False, DataSourceUpdateMode.OnPropertyChanged)
这有效,因为它是一个字符串到一个字符串,但 data.DisplayUnits 是一个字符串,即。“英寸;英尺;码;毫米;厘米;米”,目前 ComboBox 的填充方式是这样的:
ComboBoxUnits.Items.AddRange(data.DisplayUnits.Split(";"));
此外,用户还有一种方法可以在该列表中添加和删除项目。因此,当我需要执行 Items.Add 或 Items.Remove 时,如何将其绑定到 DisplayUnits 属性并在组合框项目列表更新时触发更改?
相反,它必须是 WPF 中的双向数据绑定。当 data.DisplayUnits 由另一个进程(即:ft2;yard2;cm2;m2)从它们更改为不同的“产品”(如第一个产品将测量长度而第二个产品将测量近似区域)时更新时,我需要更新 UI 以反映 Combox.Items 中的这些更改
在 MVVM 中,我可以尝试使用 ITypeConverter (Convert, ConvertBack) 但我认为 WinForms 不支持它;但是必须有一种方法可以将 Combobox.Items 格式化为数据类的 POCOs 属性,并将 POCO 类转换回 Winform 的相同属性。
有任何想法吗?
更新:澄清——我将它保存在普通旧 CLR 对象(POCO)中的原因是因为“数据”将用于 XML 序列化。XML 文件将使用 PIC 处理器下载到定制机器。这 ”;” 用于解析。因此,DisplayUnit 必须采用这种格式“in;ft;yd”。
此外,这将在 VS2008 中编译,因为我们使用的触摸屏运行的是 WinCE 6.5。一半将在 C# 中,而另一半将在 Visual Basic 中。