起初我以爲我可以用ElementName
結合檢索ListView
,然後綁定的Text
你TextBlock
到ListView
的SelectedItems.Count
。像下面 -
<!-- this won't work -->
<TextBlock Text="{Binding Path=SelectedItems, ElementName=myList, Converter="{StaticResource GetCountConverter}"}" />
然而,不同於SelectedItem
依賴屬性,這是行不通的,因爲SelectedItems
僅僅是一個正常的只讀屬性。
一個常見的解決方法是創建一個具有幾個附加屬性的靜態助手類。像這樣的東西 -
public static class ListViewEx
{
public static int GetSelectedItemsCount(DependencyObject obj)
{
return (int)obj.GetValue(SelectedItemsCountProperty);
}
public static void SetSelectedItemsCount(DependencyObject obj, int value)
{
obj.SetValue(SelectedItemsCountProperty, value);
}
public static readonly DependencyProperty SelectedItemsCountProperty =
DependencyProperty.RegisterAttached("SelectedItemsCount", typeof(int), typeof(ListViewEx), new PropertyMetadata(0));
public static bool GetAttachListView(DependencyObject obj)
{
return (bool)obj.GetValue(AttachListViewProperty);
}
public static void SetAttachListView(DependencyObject obj, bool value)
{
obj.SetValue(AttachListViewProperty, value);
}
public static readonly DependencyProperty AttachListViewProperty =
DependencyProperty.RegisterAttached("AttachListView", typeof(bool), typeof(ListViewEx), new PropertyMetadata(false, Callback));
private static void Callback(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if ((bool)e.NewValue)
{
var listView = d as ListView;
if (listView == null) return;
listView.SelectionChanged += (s, args) =>
{
SetSelectedItemsCount(listView, listView.SelectedItems.Count);
};
}
}
基本上我在這裏已經創建了一個SelectedItemsCount
附加屬性利用數據綁定。每當SelectionChanged
被觸發時,代碼會將附加屬性更新爲SelectedItems
的Count
,以便它們始終保持同步。
然後在XAML中,您將需要助手先連接到ListView
(爲了獲取ListView
實例,並認購其SelectionChanged
事件),
<ListView x:Name="myList" local:ListViewEx.AttachListView="true"
;最後,更新綁定xaml的TextBlock
。
<TextBlock Text="{Binding Path=(local:ListViewEx.SelectedItemsCount), ElementName=myList}" />
感謝您的回答。我正在嘗試你的示例,但我不確定是否可以在* Page.Resources *中使用它 - 由於ElementName = myList。 – Romasz
它也應該工作。我累了。 :) –
你說得對,我已經把你的代碼放到了我的例子中,在那裏啓用了ItemClick,而且我已經把東西弄糟了。現在工作。你有一個想法如何擺脫這個ElementName - 定義一個可以在多個頁面中使用的風格? – Romasz