Quantcast
Channel: かずきのBlog@hatena
Viewing all articles
Browse latest Browse all 1387

****Selector改良

$
0
0

改良といっても、本家のつもりんがちゃんとしたやつのコードを載せてくれた&そっちのほうが強力なので、そっちを使うといいとおもいます・・・!

私のやつは、XAMLの階層が深くなってださかったので、ResourceDictionaryを使うようにして普段DataTemplateを設定してるのと同じ要領で作れてx:Keyを型名にするようにしてみました。

[ContentProperty(Name = "Templates")]
publicclass DataTypeTemplateSelector : DataTemplateSelector
{
    private ResourceDictionary templates = new ResourceDictionary();

    public ResourceDictionary Templates
    {
        get { return templates; }
        set { templates = value; }
    }

    protectedoverride DataTemplate SelectTemplateCore(object item)
    {
        if (item == null)
        {
            returnnull;
        }

        var dict = (IDictionary<object, object>)this.Templates;
        object result = null;
        bool ignore = dict.TryGetValue(item.GetType().Name, out result);
        return result as DataTemplate;
    }
}

使い方はこんな感じ。

<ListView ItemsSource="{Binding}"><ListView.ItemTemplateSelector><local:DataTypeTemplateSelector><DataTemplate x:Key="Person"><StackPanel><TextBlock Text="にんげんです" /><TextBlock Text="{Binding Name}" /></StackPanel></DataTemplate><DataTemplate x:Key="Dog"><StackPanel Orientation="Horizontal"><TextBlock Text="いぬです" /><TextBlock Text="{Binding Name}" /></StackPanel></DataTemplate></local:DataTypeTemplateSelector></ListView.ItemTemplateSelector></ListView>

DataTemplate以外も置けてしまうのがメリットになるかデメリットになるか…。


Viewing all articles
Browse latest Browse all 1387

Trending Articles