0

夏休みの直前にいくつかの賢いことをしましたが、何らかの理由でコードを削除し、1 つの問題をどのように解決したか思い出せないので、StackOverflow の専門家に相談します。

基本的な考え方はこれです。ビューモデルの監視可能なコレクションにバインドされたリストビューがあります。リスト内の項目は、ジェネリック タイプ、または特殊化された継承クラスです。ここで、アイテムのタイプが Generic の場合は Generic ビューをリストに表示し、タイプが Specialized の場合は Specialized ビューを表示したいと考えています。ビューモデルごとにデータ テンプレートを設定し、そのビューにバインドしました。しかし、何らかの理由で、ビューをロードする代わりに、表示されるのはビューモデルの完全なクラス名だけです。ばかげたことを見逃していることはわかっていますが、どうやら脳をビーチに置き忘れたようです。

これがxamlです(名前空間などは削除されています):

<UserControl x:Class="ReportHostView"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:vmrep="ViewModel.Report"            
         xmlns:vwrep="View.Report" 
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">
<UserControl.Resources>
    <DataTemplate x:Key="DefaultDataTemplate" DataType="{x:Type vmrep:GenericItemViewModel}">
        <vwrep:GenericItemView />
    </DataTemplate>

    <DataTemplate x:Key="SpecializedDataTemplate" DataType="{x:Type vmrep:SpecializedItemViewModel}">
        <vwrep:SpecializedItemView />
    </DataTemplate>

    <DataTemplate x:Key="ItemTemplate">
        <ContentPresenter Content="{Binding}" />
    </DataTemplate>
</UserControl.Resources>
<Grid Width="1024" Height="800">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="200" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <ListView ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}" ItemTemplate="{StaticResource ItemTemplate}">
    </ListView>
</Grid>

4

1 に答える 1

1

次のことを試してください: x:Key 属性を削除して、DataTemplates をデフォルトのものに変更します。

<DataTemplate DataType="{x:Type vmrep:GenericItemViewModel}">
    <vwrep:GenericItemView />
</DataTemplate>

<DataTemplate DataType="{x:Type vmrep:SpecializedItemViewModel}">
    <vwrep:SpecializedItemView />
</DataTemplate>

Item テンプレートを ListView に明示的に設定しないでください

<ListView ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}">
于 2012-08-10T06:55:17.750 に答える