如何禁用选择单个项目在GridView(How to disable selection a sin

2019-06-24 18:04发布

你如何禁用从一个GridView选择单个项目?

我有与它GridView的的ItemsSource绑定到一个IEnumerable <SampleDataItem>。 我希望能够以编程不允许的某些项目的选择列表,同时允许其他的选择。

Answer 1:

虽然我没有这样做,你应该能够在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;
    }
}


Answer 2:

薛明的回答是伟大的。 我只是增加了一些附加属性到的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模板,并修改它,因此禁用的项目不看的地方。



文章来源: How to disable selection a single item in a GridView