2015-05-11 31 views
2

在我的應用程序中,我存儲了一個結構數組,其中包含我需要向客戶支付多少賬單/硬幣以及我有效支付了多少賬單/硬幣。綁定到WPF中的結構數組

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]用於指示我想要使用哪種類型的紙幣/硬幣。

我想讓這項工作有兩種方式,這樣我的自定義控件就可以更新所支付的硬幣/賬單數量。爲此,我需要爲我的MoneyTypes屬性設置一個setter。

我不確定正確的做法。我有一種感覺,不管怎樣,我不應該從我的viewmodel/model中傳遞整個數組,但是我的MoneyTypes中的一個特定部分(付費/請求字段,某種索引指示要使用哪個條目)

我不確定如何做到這一點。

+1

恐怕。數據綁定不會使用struct。如果你需要兩種方法,你應該真的把它變成一個班級。 –

+0

如果我將結構更改爲類,我將如何處理這個問題?這主要是我不明白的Set部分。如何告訴模型該數組中的條目已更改?或者,我已經通過將整個數組傳遞給模型中的視圖模型來做到這一點,我應該如何做到這一點? –

+0

您必須實施INotifyPropertyChanged,以便您的更改在視圖中可見。你的結構體沒有實現它,所以即使你改變ViewModel的東西,它也不會在View中被改變。 –

回答