0
 <Grid>
        <ItemsControl ItemsSource="{Binding ScreenViewModelCollection}">
            <ItemsControl.Resources>
                <DataTemplate DataType="{x:Type redScreenView:RedScreenView}">
                    <Grid>
                        <redScreenView:RedScreenView/>
                    </Grid>
                </DataTemplate>

                <DataTemplate DataType="{x:Type greenScreenView:GreenScreenView}">
                    <Grid>
                        <greenScreenView:GreenScreenView/>
                    </Grid>
                </DataTemplate>

            </ItemsControl.Resources>
        </ItemsControl>

ViewModel の View を描画する代わりに、View が属する名前空間を出力します! ただし、ItemTemplate を使用すると、そのうちの 1 つだけで機能します。そして、ItemTemplate は複数のコンテンツを持つことはできません:(

4

2 に答える 2

2

あなたDataTemplatesは、私があなたが含んでViewsいると疑っている間です。ScreenViewModelCollectionViewModels

DataTypeプロパティをViewModels代わりにする必要があるだけですViews

<DataTemplate DataType="{x:Type myViewModels:RedScreenViewModel}">
    <Grid>
        <redScreenView:RedScreenView/>
    </Grid>
</DataTemplate>

<DataTemplate DataType="{x:Type myViewModels:GreenScreenViewModel}">
    <Grid>
        <greenScreenView:GreenScreenView/>
    </Grid>
</DataTemplate>
于 2012-07-03T12:30:53.957 に答える
0

redScreenView/greenScreenView 名前空間、ScreenViewModelCollection のタイプ、ItemsControl.ItemTemplate の xaml の定義がありません。

編集: xaml を見てください。タイプミスがあると思います。DataTemplatesのDataTypeはビューモデルである必要があります。もちろん、データテンプレートの内容はビューです。

それにもかかわらず、ローカルは名前空間を定義し、ウィンドウ/ユーザーコントロールの定義に含まれている必要があります。例えば

 <UserControl xmlns:local="clr-namespace:MyWpfApplication1.MyTest.ViewModels" 
              xmlns:views="clr-namespace:MyWpfApplication1.Controls.Views" 


    <ItemsControl ItemsSource="{Binding ScreenViewModelCollection}">
        <ItemsControl.Resources>
            <DataTemplate DataType="{x:Type local:RedScreenViewModel}">
                <Grid>
                    <views:RedScreenView/>
                </Grid>
            </DataTemplate>
            <DataTemplate DataType="{x:Type local:GreenScreenViewModel}">
                <Grid>
                    <views:GreenScreenView/>
                </Grid>
            </DataTemplate>
        </ItemsControl.Resources>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <ContentPresenter Content="{Binding}"/>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

この ItemTemplate は役に立ちますか?

于 2012-07-03T11:53:34.030 に答える