我不知道是否有任何「回調」Listview創建,以便我可以顯示非常具體類型的數據從我有列表。 我知道的是隻有完整列表可以綁定到ListView,但我怎麼可以像在iOS中通過Datasource Delegate所做的那樣對它進行一些檢查。Windows Metro應用程序過濾列表視圖並顯示列表中的特定數據?
有人嗎?
我不知道是否有任何「回調」Listview創建,以便我可以顯示非常具體類型的數據從我有列表。 我知道的是隻有完整列表可以綁定到ListView,但我怎麼可以像在iOS中通過Datasource Delegate所做的那樣對它進行一些檢查。Windows Metro應用程序過濾列表視圖並顯示列表中的特定數據?
有人嗎?
過濾和分組傳統上採用CollectionViewSource。不幸的是,CollectionViewSource不再有過濾器事件或GroupDescriptions財產。看起來過濾和分組不受支持,但兩者仍然可以使用LINQ來實現。
在您的Xaml中,在頁面的參考資料部分添加一個CollectionViewSource。確保IsSourceGrouped設置爲true:
<common:LayoutAwarePage.Resources>
<!--
Collection of grouped items displayed by this page, bound to a subset
of the complete item list because items in groups cannot be virtualized
-->
<CollectionViewSource x:Name="GroupsCV" Source="{Binding Groups}" IsSourceGrouped="True" />
</common:LayoutAwarePage.Resources>
現在,CollectionViewSource(GroupsCV)應該爲你的GridView被設置爲的ItemsSource:
<GridView ItemsSource="{Binding Source={StaticResource GroupsCV}}" />
注意CollectionViewSource綁定到屬性爲組。這個屬性是我的ViewModel的一部分。由組屬性返回的值將是LINQ查詢的結果。起初我很困惑,因爲我不知道型號屬性應該返回。我解決了一系列可比項目。這幾乎適用於任何類型的任何LINQ查詢。
所以,在您的視圖模型(或任何你的DataContext是)添加以下屬性:
private IEnumerable<IGrouping<IComparable, TItem>> groups;
public IEnumerable<IGrouping<IComparable, TItem>> Groups
{
get { return groups; }
set { SetProperty(ref groups, value); }
}
現在,每當你想改變分組或過濾器,只需設置組屬性等於LINQ查詢像這樣:
Groups = from i in musicItems
group i by i.Genre into g
orderby g.Key
select g;
LINQ確實很大已知屬性名稱,而是從屬性名稱的列表,讓用戶選擇,並動態地由物業分組什麼?那麼,LYNQ能夠創建一個組的唯一要求是,無論你通過它,它必須實現IComparable。
這裏有一個小的擴展方法,它的屬性以字符串形式的名稱,並返回一個IComparable的:
static public IComparable GetComparableValue<T>(this T item, string propName) where T : class
{
return (IComparable)typeof(T).GetTypeInfo().GetDeclaredProperty(propName).GetValue(item, null);
}
有了到位,你可以通過這樣的屬性名做一個動態查詢:
string groupByPropertyName = "Artist";
Groups = from i in musicItems
group i by i.GetComparableValue(groupByPropertyName) into g
orderby g.Key
select g;
希望幫助!
PS我正在展示如何在那裏創建組,但是你也可以很容易地進行過濾。在查詢的第二行(from之後的行)添加一個where子句。任何屬性,甚至應該能夠使用GetComparableValue技巧動態過濾屬性名稱。 – 2012-07-30 20:58:04
謝謝jared .. !! – Suny 2012-08-01 05:09:29
我並不是100%確定你想要解決的確切情況,但是有辦法在現有數據源上創建過濾視圖。你也不會說這是XAML還是JavaScript。我要回答JavaScript部分。
顯然,你可以重新包裝你想要的表單。
您也可以選擇一些其他選項:
http://msdn.microsoft.com/en-us/library/windows/apps/Hh700774.aspx
http://msdn.microsoft.com/en-us/library/windows/apps/hh465496.aspx
http://msdn.microsoft.com/en-us/library/windows/apps/hh700741.aspx
http://msdn.microsoft.com/en-us/library/windows/apps/hh465464.aspx
dhopton它的XAML和C#。我沒有使用JS。你能否提供幫助? – Suny 2012-07-25 05:34:00
這只是一個普通的IList類型的API,您應該可以執行正常的C#-y,WPF-y方法來完成所有這些工作。在這方面沒有我的經驗:( – 2012-07-25 17:26:59
爲什麼不只是綁定到一個空列表,然後添加到它? – mydogisbox 2012-07-25 04:10:23
你能解釋一下嗎?謝謝 – Suny 2012-07-25 05:46:24
也許我不明白你的意思是「完整列表」 – mydogisbox 2012-07-25 12:23:23