说,我有两个类:AppleViewModel
和OrangeViewModel
。我有一个ObservableCollection<object>
和AppleViewModel
的OrangeViewModel
。
还有两个对应的 View :AppleView
和OrangeView
。
在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/