6

GridView からの単一項目の選択を無効にするにはどうすればよいですか?

ItemsSource が IEnumerable<SampleDataItem> にバインドされた GridView があります。リスト内の一部の項目の選択をプログラムで許可しないようにしながら、他の項目の選択を許可できるようにしたいと考えています。

4

2 に答える 2

7

私はこれを行っていませんが、GridView で ItemContainerStyleSelector を使用できるはずです。このメソッドは、コンテナー (GridViewItem) とバインド先のアイテムを提供します。そこから、GridViewItem の IsEnabled プロパティを false に設定して、選択できないようにすることができます。

デフォルトの 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;
    }
}
于 2012-05-24T10:08:46.233 に答える
6

ナイジェルの答えは素晴らしいです。WinRT XAML Toolkitにいくつかの添付プロパティを追加しました。これにより、ItemsSourceプロパティバインディングを使用してGridViewにデータを入力する場合に簡単に実行できるようになります。

私にとって、GridViewItemプロパティを変更する通常の方法は、GridView.ItemContainerStyleプロパティを使用することでした。そのメソッドを使用するには、スタイルを使用してIsEnabledプロパティを指定する必要があり、スタイルセッターはWinRTでのバインディングをサポートしていません。ItemContainerStyleSelectorの使用は一方向かもしれませんが、カスタムクラスを定義する必要があります。

次のように、GridView.ItemTemplateの任意のコントロールに設定できるIsEnabledプロパティを使用してGridViewItemExtensionsクラスを作成しました。

xmlns:xyzc="using:Xyzzer.WinRT.Controls"
xyzc:GridViewItemExtensions.IsEnabled="{Binding IsEnabled}"

このプロパティには、祖先のビジュアルツリーでGridViewItemを検索し、そのIsEnabled値をその子孫に設定されたGridViewItemExtensions.IsEnabled値に同期させる動作があります。

次に、ナイジェルが言ったように、GridViewItemからテンプレートを抽出し、無効にされたアイテムが見当違いにならないように変更する必要があります。

于 2012-05-24T16:48:18.437 に答える