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