[英]How do I bind row count of a datagrid to a textblock text whose specific column has specific values?
我的 WPF c# 應用程序(MVVM 模式)中有一個數據網格,其ItemsSource
綁定到ICollectionView
,例如:
public ICollectionView PendingBills { get; private set; }
public BillsViewModel()
{
_penBills = m.PBills;
PendingBills = new ListCollectionView(_penBills)
{
Filter = o => ((Bills)o).PaidOn==""
};
}
....
<DataGrid ItemsSource="{Binding PendingBills}"
現在我使用類似的東西將數據網格的行數綁定到文本塊文本(顯示過濾后所有行的計數)
<TextBlock Text="{Binding PendingBills.Count, StringFormat='Total Pending Bills :\ {0}'}" ...
但我也想將行數綁定到一個不同的文本塊,其中說數據庫的BillNo
列數據具有特定的文本,或者它的 null 或非空類似的東西。
我怎么做 ? 我是否需要對此使用某種IValueConverter
,如果是的話如何?
更新
我已經嘗試將屬性設置為視圖模型,例如
private int _cnt;
public int Cnt
{
get
{
if (_cnt == 0) _cnt = _penBills.Where(x => !String.IsNullOrEmpty(x.PaidOn.ToString())).Count();
return _cnt;
}
set
{
_cnt =value;
}
}
然后像Text="{Binding Cnt}"
一樣使用它,但它不起作用。
雖然您總是可以使用轉換器(這是我根據經驗得出的個人觀點),但您可能只想在后面的代碼中執行此操作。 您可以存儲一個屬性,該屬性根據 linq 查詢獲取您要查找的計數並簡單地綁定到該值。
讓我舉個例子。 您可以取回與某些文本匹配的元素:
var countOfMatches = yourlist.Where(x => x.SOMEVALUE == SOMETEXT).Count();
或者你可以通過一些數字條件:
var countOfMatches = yourList.Where(x => x.Price > 400).Count();
我希望這對您有幫助。
簡而言之,我想說的是,如果您想要基於此列表的自定義計數,您最好為它創建一個屬性並使用查詢設置它。
根據您的編輯:將查詢更改為:
_penBills.Where(x => x.PaidOn.ToString() != string.Empty).Count();
(這真的只是一個挑剔)
至於您的綁定,您能否確認票據的可觀察集合和這個新的整數屬性存儲在一個視圖模型上,該模型是這個 xaml.cs 視圖的數據上下文?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.