我有一個的ObservableCollection,我需要綁定2個標籤,首先顯示的收集和第二項中的計數顯示值的總和。WPF數據綁定使用的ObservableCollection [標籤
首先標籤綁定到收藏count屬性和第二標籤直接綁定到的ObservableCollection與轉換器計算總所有項目的
XAML看起來像這樣
<Grid>
<ListBox Name="itemList" ItemsSource="{Binding DataList}"/>
<Label Name="lblcount" Content="{Binding DataList.Count}" />
<Label Name="lblTotal" Content="{Binding DataList, Converter={StaticResource calculateTotalConvertor}" />
</Grid>
我的VM具有收藏這樣
ObservableCollection<int> data = new ObservableCollection<int>();
public ObservableCollection<int> DataList
{
get { return data; }
set { data = value; }
}
我的轉換代碼是
public class CalculateTotalConvertor : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
ObservableCollection<int> collection = value as ObservableCollection<int>;
return collection.Sum();
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
問題是在DataList控件添加新項目,項目的ListView和標籤顯示計數被更新,但「lblTotal」犯規得到與總數更新。
基本上如何強制您具有約束力的ObservableCollection變化進行評估?它如何直接爲ListView或DataGrid工作,但不能用於標籤?
我知道這個問題可以通過在虛擬機創建一個屬性來顯示總並提高性能變化時,採集得到更新來解決,但有什麼比這更好的解決方案呢?
中,當然這是我的簡單實際問題的形式,我沒有訪問視圖模型和集合,它是一個第三方控制。我正在創建一個包裝器用戶控件,並且對視圖的內部集合有一個相對綁定。
你試過'set {data = value; RaisePropertyChanged( 「數據」); ''? –
老實說,我會提供一個完全符合你想要的屬性,並處理VM中的邏輯。使用轉換器是件奇怪的事情,我儘量避免使用它。想想看,一個轉換器應該將一個值轉換爲另一個值,你將一個列表轉換爲一個數字。如果初始值被更新,則轉換器會被再次調用,它不是你的情況,它保持不變,只是其內部狀態發生變化。使用你的虛擬機,爲視圖提供和預處理數據是視圖模型的主要目的。 – dowhilefor
@dowhilefor我同意你...我想知道DataGrid如何更新集合更改,以及我是否可以在此處執行同樣的操作。我的實際用例很多,很複雜。我編輯了這個問題。 – Ankit