我遇到了一个问题,使用
以下是示例视图模型:
当在
我知道,如果我为
这是已知的错误吗?还是我漏掉了什么? 更新。 我在MS Connect上提交了一个问题。
ScrollViewer
。以下是示例视图模型:
public class A
{
public string Text { get; set; }
}
public class B
{
public int Number { get; set; }
}
...以及 DataTemplateSelector
:
public class ViewModelTemplateSelector : DataTemplateSelector
{
public DataTemplate ATemplate { get; set; }
public DataTemplate BTemplate { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
if (item is A)
return ATemplate;
if (item is B)
return BTemplate;
return base.SelectTemplate(item, container);
}
}
XAML:
<Grid>
<Grid.Resources>
<local:ViewModelTemplateSelector x:Key="ViewModelTemplateSelectorKey">
<local:ViewModelTemplateSelector.ATemplate>
<DataTemplate>
<TextBlock Text="{Binding Text}"/>
</DataTemplate>
</local:ViewModelTemplateSelector.ATemplate>
<local:ViewModelTemplateSelector.BTemplate>
<DataTemplate>
<TextBox Text="{Binding Number}"/>
</DataTemplate>
</local:ViewModelTemplateSelector.BTemplate>
</local:ViewModelTemplateSelector>
</Grid.Resources>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<ListBox x:Name="ListBox" ItemsSource="{Binding}"/>
<ScrollViewer Grid.Row="1" Content="{Binding SelectedItem, ElementName=ListBox}"
ContentTemplateSelector="{StaticResource ViewModelTemplateSelectorKey}"/>
<ContentControl Grid.Row="2" Content="{Binding SelectedItem, ElementName=ListBox}"
ContentTemplateSelector="{StaticResource ViewModelTemplateSelectorKey}"/>
</Grid>
当在
ListBox
中选择任何项时,发生的情况如下:
ScrollViewer
忽略了ContentTemplateSelector
,而ContentControl
则没有。 ScrollViewer
继承自ContentControl
,乍一看,这种行为似乎没有理由。我知道,如果我为
A
和B
声明隐式数据模板,ScrollViewer
将正确处理它们,但这对于我的实际应用程序不是选项。这是已知的错误吗?还是我漏掉了什么? 更新。 我在MS Connect上提交了一个问题。
ScrollViewer
它永远不会被触发。 - Dennis