根据数据类型更改面板模板

时间:2012-08-14 12:23:53

标签: wpf

我有一个树视图(在左边)和wrappanel(在右边)。 Treeview显示来自XMLDataProvider的XML文件内容如下所示:

<?xml version="1.0" encoding="utf-8"?>
<Documents>
  <DocFolder Name="Folder">
    <DocFolder DocFolderName="Subfolder">
      <DocItem DocItemName="item" />
    </DocFolder>
  </DocFolder>
</Documents>

是否可以在绑定到TreeView所选项{Binding ElementName=treeView1, Path=SelectedItem}的WrapPanel中显示不同的内容,具体取决于所选元素的类型(DocFolder或DocItem)?

2 个答案:

答案 0 :(得分:0)

这样的事可能吗?

<Control DataContext="{Binding ElementName=treeView1, Path=SelectedItem}"
         Template="{Binding ElementName=treeView1, Path=SelectedItem,
                Converter={StaticResource selectedItemToDataTemplateConverter}}" />

...和转换器的代码:

public class SelectedItemToDataTemplateConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, 
                                                         CultureInfo culture)
    {
        if (value is DocFolder)
        {
           return new DocFolderUC(); // Your user control to display DocFolders..
        }
        else if (value is DocItem)
        {
           return new DocItemUC(); // Your user control to display DocItems..
        }
        [...]

答案 1 :(得分:0)

如果将warp面板绑定到所选TreeView项的DataContext,并使用两种类型的DataTemplate自动显示不同的内容,该怎么办?即{Binding ElementName=treeView1, Path=SelectedItem.DataContext}