说,我有两个课程:AppleViewModel
和OrangeViewModel
。我有ObservableCollection<object>
个AppleViewModel
和OrangeViewModel
个。
还有两个相应的观点: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>
它只显示空白屏幕。如何修复它以便列表框显示苹果和橙子的不同视图?
答案 0 :(得分:4)
ContentControl的ContentTemplate的DataContext实际上是ContentControl的内容,而不是其DataContext。所以问题可能是你的Views正在以DataContext的形式获得Null。
尝试这样
<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