2

私のアプリケーションでは、を扱っていItemControlます。このitemControlは、ObservableCollectionを受け取ります。

上記のように、BaseItemViewModelは抽象クラスです。そして、私のアプリケーションが起動しているときに、moduleCatalog検出によってモジュールをロードします。

各モジュールには、BaseItemViewModelから継承されたクラスがあります

したがって、ItemsControlでdataTemplatesを次のように設定することはできません。

<DataTemplate> 
    <View:GeneralSettingsView/> 
</DataTemplate> 
<DataTemplate> 
    <View:AdvancedSettingsView/> 
</DataTemplate> 

Module Discoveryを使用している場合、それぞれのビューモデルからビューを表示するにはどうすればよいですか?

4

1 に答える 1

3

ItemTemplateSelectorプロパティを見ましたか?

たとえば、コンテンツセレクタークラスを作成します。

public class myContentSelector : DataTemplateSelector
{
    public override DataTemplate SelectTemplate(object item, DependencyObject container)
    {
        if (item != null)
        {
            VMBase vm = item as VMBase;

            switch (vm.Type)
            {
                case myType.General:
                    return Application.Current.Resources["GeneralSettings"] as DataTemplate;
                default:
                    return Application.Current.Resources["AdvancedSettings"] as DataTemplate;
            }
        }

        return null;
    }
}

そのための静的リソースを作成します。

<local:myContentSelector x:Key="contentSelector" />

そして、ItemsControlで設定します。

<ItemsControl ItemsSource="{Binding mySource}" ItemTemplateSelector="{StaticResource contentSelector}" />

そして、データテンプレートを次の名前に設定します。

<DataTemplate x:Key="GeneralSettings" DataType="{x:Type vm:VMBase}"> 
    <View:GeneralSettingsView/> 
</DataTemplate> 
<DataTemplate x:Key="AdvancedSettings" DataType="{x:Type vm:VMBase}"> 
    <View:AdvancedSettingsView/> 
</DataTemplate> 

そんな感じ?

于 2012-07-04T22:51:11.133 に答える