1
如果我有一組綁定到我的GridView的項目,並且每個項目都有一個屬性IsSelected,我如何確保選擇GridViewItem的狀態?在GridView中設置選定的項目
我試過綁定ItemContainerStyle中的屬性,但沒有運氣。
我覺得最好使用ItemTemplateSelector嗎?也許我會嘗試,而我等待任何反饋。
如果我有一組綁定到我的GridView的項目,並且每個項目都有一個屬性IsSelected,我如何確保選擇GridViewItem的狀態?在GridView中設置選定的項目
我試過綁定ItemContainerStyle中的屬性,但沒有運氣。
我覺得最好使用ItemTemplateSelector嗎?也許我會嘗試,而我等待任何反饋。
這一直是一個痛苦由於缺乏支持Value
的結合量的Style
的Setter
在WinRT中,但應該是一個解決方法,它已經適應了的WinRT(它最初目標在Silverlight 4相同的限制 - PS:Slverlight 5支持Setters-綁定),您可以檢查它here,
但即便如此,由於某些原因this也不會工作的WinRT:
<GridView SelectionMode="Multiple" HorizontalAlignment="Stretch">
<GridView .ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="IsSelected" Value="True"/>
</Style>
</GridView .ItemContainerStyle>
現在,除非你找到一個更好的解決辦法,在這裏一點點黑客從here靈感看起來不那麼幹淨,但它做的伎倆
擴展的GridView類
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
public class GridViewEx : GridView
{
protected override void PrepareContainerForItemOverride(Windows.UI.Xaml.DependencyObject element, object item)
{
base.PrepareContainerForItemOverride(element, item);
var gridItem = element as GridViewItem;
var binding = new Binding { Mode = BindingMode.TwoWay, Source = item, Path = new PropertyPath("IsSelected") };
gridItem.SetBinding(SelectorItem.IsSelectedProperty, binding);
}
}
確保IsSelected屬性存在於您的GridView
ItemSource
集合
public class Item
{
public String Name { get; set; }
public bool IsSelected { get; set; }
}
// ..
public ObservableCollection<Item> ListItems
{
get
{
return _listItems;
}
set
{
if (_listItems == value)
{
return;
}
_listItems = value;
OnPropertyChanged();
}
}
,你是好去
<local:GridViewEx SelectionMode="Multiple" ItemsSource="{Binding ListItems}" >
<local:GridViewEx.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}"></TextBlock>
</StackPanel>
</DataTemplate>
</local:GridViewEx.ItemTemplate>
</local:GridViewEx>
我們需要做的所有這些由於缺乏祖先的結合。我在這裏創建了一個API請求(https://wpdev.uservoice.com/forums/110705-universal-windows-platform/suggestions/9333168-ancestor-binding-missing)。如果感興趣,請點贊。 –
有一個缺陷,如果你滾動列表,選擇消失。不知道爲什麼/發生了什麼。 – earthling
@earthling由於UI虛擬化而發生。虛擬化的UI可能會重用容器並打破綁定。 – akshay2000