说,我有两个类:AppleViewModelOrangeViewModel。我有一个ObservableCollection<object>AppleViewModelOrangeViewModel

还有两个对应的 View :AppleViewOrangeView

在app.xaml中,有适用于它们的DataTemplates:

<Application.Resources>
    <DataTemplate x:Key="AppleTemplate">
        <local:AppleView/>
    </DataTemplate>
    <DataTemplate x:Key="OrangeTemplate">
        <local:OrangeView/>
    </DataTemplate>
</Application.Resources>

还有一个转换器,以防万一:
public class MyContentConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if(value is AppleViewModel)
            return Application.Current.Resources["AppleTemplate"] as DataTemplate;
        else if (value is OrangeViewModel)
            return Application.Current.Resources["OrangeTemplate"] as DataTemplate;
        else return null;
    }
}

它被引用为:
<phone:PhoneApplicationPage.Resources>
    <local:MyContentConverter x:Key="cConverter"/>
</phone:PhoneApplicationPage.Resources>

这是<ListBox/>:
    <ListBox ItemsSource="{Binding Fruits}" >
        <ListBox.ItemTemplate>
            <DataTemplate>
                <ContentControl ContentTemplate="{Binding Converter={StaticResource cConverter}}"/>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

它只显示空白屏幕。如何解决此问题,以便列表框显示苹果和橙子的不同 View ?

最佳答案

ContentControl的ContentTemplate的DataContext实际上是ContentControl的内容,而不是其DataContext。因此,问题可能在于您的View正在将Null用作DataContext。

像这样尝试

<ListBox ItemsSource="{Binding Fruits}" >
    <ListBox.ItemTemplate>
        <DataTemplate>
            <ContentControl Content="{Binding}"
                            ContentTemplate="{Binding Converter={StaticResource cConverter}}"/>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

更新
尝试向您的AppleView和OrangeView添加一些静态信息,看看是否可行

OrangeView
<StackPanel x:Name="LayoutRoot" Background="Orange" Orientation="Horizontal">
    <TextBlock Text="Orange View:"/>
    <TextBlock Text="{Binding Name}"/>
</StackPanel>

AppleView
<StackPanel x:Name="LayoutRoot" Background="Green" Orientation="Horizontal">
    <TextBlock Text="Apple View:"/>
    <TextBlock Text="{Binding Name}"/>
</StackPanel>

另外,我在此处上传了示例应用程序,因此您可以将其与您的应用程序进行比较:
http://www.mediafire.com/?dqy47c69zgcmcnv

关于silverlight - silverlight:如何根据项目对象类型在列表框中显示不同的 View ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4577491/

10-13 00:11