gpt4 book ai didi

silverlight - silverlight:如何根据项目对象类型在列表框中显示不同的 View ?

转载 作者:行者123 更新时间:2023-12-03 10:22:00 25 4
gpt4 key购买 nike

说,我有两个类: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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com