【发布时间】:2015-05-11 15:00:11
【问题描述】:
在我的应用程序中,我存储了一个结构数组,其中包含我需要向客户支付多少钞票/硬币以及我实际支付了多少。
public struct MoneyType
{ //contains more, but left out for readability
public int Requested { get; set; } // How many are requested for a payment
public int Paid { get; set; } //bills paid to the customer
}
我用这些创建了一个数组,我可以通过以下方式访问视图模型:
MoneyType[] money; //correctly initialised in the constructor
public MoneyType[] GetMoney()
{
return money;
}
在视图模型本身中,我以这种方式使这些可访问:
public MoneyType[] MoneyTypes //Denominations
{
get
{
return _dataService.GetMoney();
}
}
最后,在我的 XAML 中,我访问了这些:
<cbtn:BillCounter x:Name="euro200" Value = "{Binding MoneyTypes[2].Paid, Mode=TwoWay }" />
[2] 用于表示我想使用哪种类型的钞票/硬币。
我想通过 2 种方式完成这项工作,以便我的自定义控件可以更新支付的硬币/纸币数量。为此,我需要一个用于 MoneyTypes 属性的设置器。
我不确定执行此操作的正确方法。我有一种感觉,不知何故,我不应该从我的视图模型/模型中传递整个数组,而是我的 MoneyTypes 之一的特定部分(付费/请求字段,某种索引指示要使用哪个条目)
我不确定该怎么做。
【问题讨论】:
-
恐怕。数据绑定不适用于结构。如果你需要它是两种方式,你真的应该把它变成一个类。
-
如果我将结构更改为类,我将如何处理?主要是我没有得到的 Set 部分。如何告诉模型该数组中的条目已更改?还是通过将整个数组从模型传递给视图模型,我已经做错了,我应该以不同的方式做吗?
-
您必须实现 INotifyPropertyChanged,以便您的更改在视图中可见。您的结构没有实现它,因此即使您从 ViewModel 更改某些内容,也不会在 View 中更改。
标签: wpf data-binding