你如何禁用从一个GridView选择单个项目?
我有与它GridView的的ItemsSource绑定到一个IEnumerable <SampleDataItem>。 我希望能够以编程不允许的某些项目的选择列表,同时允许其他的选择。
你如何禁用从一个GridView选择单个项目?
我有与它GridView的的ItemsSource绑定到一个IEnumerable <SampleDataItem>。 我希望能够以编程不允许的某些项目的选择列表,同时允许其他的选择。
虽然我没有这样做,你应该能够在GridView上使用ItemContainerStyleSelector,该方法使您的容器(GridViewItem)和你结合的项目。 从那里,你可以设置在GridViewItem为false,这使得它无法选择的IsEnabled属性。
您还可能会需要选择一个自定义样式,以及因为默认GridViewItem风格将定制禁用的项目将如何看。
更新 DataTemplateSelector解决方案
public class IssueGridTemplateSelector : DataTemplateSelector
{
protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
{
var selectorItem = container as SelectorItem;
if (item is Issue)
return IssueTemplate;
selectorItem.IsEnabled = false;
selectorItem.Style = RepositoryItemStyle;
return RepositoryTemplate;
}
public DataTemplate IssueTemplate
{
get;
set;
}
public DataTemplate RepositoryTemplate
{
get;
set;
}
public Style RepositoryItemStyle
{
get;
set;
}
}
薛明的回答是伟大的。 我只是增加了一些附加属性到的WinRT XAML工具包应该更简单,如果你正在使用填充ItemsSource属性绑定你的GridView做。
对我来说,修改GridViewItem属性,然后以通常的方式是使用GridView.ItemContainerStyle财产。 使用该方法,你需要指定使用样式和风格制定者不支持绑定在WinRT中IsEnabled属性。 使用ItemContainerStyleSelector可能是一个办法,但它需要定义一个自定义类。
我创建了一个GridViewItemExtensions类用,你可以在你的GridView.ItemTemplate任何像这样的控制设置IsEnabled属性:
xmlns:xyzc="using:Xyzzer.WinRT.Controls"
xyzc:GridViewItemExtensions.IsEnabled="{Binding IsEnabled}"
该物业在其祖先可视树找到GridViewItem并保持同步到其子集GridViewItemExtensions.IsEnabled价值及其价值的IsEnabled的行为。
然后,随着薛明说 - 你仍然需要提取从GridViewItem模板,并修改它,因此禁用的项目不看的地方。