使用datatemplate动态加载radpanes和属性网格

时间:2016-07-12 07:48:24

标签: c# wpf telerik datatemplate

我正在使用一些telerik组件,我正在尝试执行以下操作: 我有一个TabCollection这是一个可观察的ConfigurationTab集合我想为这个集合中的每个ConfigurationTab创建一个radPane(这是我管理的那种)然后我希望当前标签显示{{ 1}}我将绑定(自定义)属性集合。

代码如下: (XAML)

RadPropertyGrid

C#

<UserControl.Resources>
    <DataTemplate x:Key="TabCollectionTemplate">
        <telerik:RadPane CanUserClose="False" Header="{Binding DisplayName}">
            <telerik:RadPropertyGrid Margin="0,4,0,4"
                                     assistant:PropertyGridAssistant.AllowDescription="True"
                                     assistant:PropertyGridAssistant.AllowReset="True"
                                     valid:ValidationAssistant.IsEnabled="True"
                                     valid:ValidationAssistant.IsValid="{Binding IsTaskValid,
                                                                                 Mode=OneWayToSource}"
                                     BorderThickness="0,0,0,0"
                                     DockPanel.Dock="Top"
                                     EnableEditorCaching="False"
                                     Item="{Binding Path=TabPropertyCollection,
                                                    UpdateSourceTrigger=PropertyChanged}"
                                     SearchBoxVisibility="Collapsed"
                                     SortAndGroupButtonsVisibility="Visible" />
        </telerik:RadPane>
    </DataTemplate>
</UserControl.Resources>
<Grid>
    <telerik:RadDocking Name="ConfigurationDocking">
        <telerik:RadDocking.DocumentHost>
            <telerik:RadSplitContainer InitialPosition="DockedRight">
                <telerik:RadPaneGroup ItemTemplate="{StaticResource TabCollectionTemplate}" ItemsSource="{Binding TabCollection}" />
            </telerik:RadSplitContainer>
        </telerik:RadDocking.DocumentHost>
    </telerik:RadDocking>
</Grid>

我使用当前代码的内容如下所示,选项卡的标题正确填充显示名称,但窗格内容仅显示的部分:“IOLAN.ModuleConfigurationTester.ConfigurationTab”,这是问题: enter image description here

当我点击第二个标签时,我得到一个空引用异常:

public class ConfigurationTab : ObservableObject
{
    private string mDisplayName = string.Empty;
    private Property.Management.Properties mProperties = new Property.Management.Properties();

    public string DisplayName
    {
        get
        {
            return mDisplayName;
        }
        set
        {
            mDisplayName = value;
            this.RaisePropertyChanged(() => this.DisplayName);
        }
    }

    public Property.Management.Properties TabProperties
    {
        get
        {
            return mProperties;
        }
        set
        {
            mProperties = value;
            this.RaisePropertyChanged(() => this.TabProperties);
            this.RaisePropertyChanged(() => this.TabPropertyCollection);
        }
    }

    public PropertiesToPropertyGridAdapter<DescriptorOfProperty> TabPropertyCollection
    {
        get
        {
            return new PropertiesToPropertyGridAdapter<DescriptorOfProperty>(mProperties);
        }
    }

谁能看到我做错了什么?

修改

有趣的是,如果我将我的数据模板更改为一个简单的文本框它没有任何改变,我在radpane =“IOLAN.ModuleConfigurationTester.ConfigurationTab”中看到的唯一的东西,我仍然得到一个空引用试图打开其他标签:

System.NullReferenceException occurred
Message: Exception thrown: 'System.NullReferenceException' in Telerik.Windows.Controls.Docking.dll
Additional information: Object reference not set to an instance of an object.

1 个答案:

答案 0 :(得分:0)

过了一会儿我发现了我必须做的事情,我只需要使用TablControl并设置内容模板,就像这样解决了所有问题:

<UserControl.Resources>
    <DataTemplate x:Key="ContentTemplate">
        <telerik:RadPropertyGrid Name="PropertyGrid"
                                 Margin="0,4,20,4"
                                 assistant:PropertyGridAssistant.AllowDescription="True"
                                 assistant:PropertyGridAssistant.AllowReset="True"
                                 BorderThickness="0,0,0,0"
                                 IsGrouped="True"
                                 Item="{Binding Path=TabPropertyCollection,
                                                UpdateSourceTrigger=PropertyChanged}"
                                 SearchBoxVisibility="Collapsed" />
    </DataTemplate>
    <DataTemplate x:Key="HeaderTemplate">
        <TextBlock Text="{Binding Path=DisplayName}" />
    </DataTemplate>
</UserControl.Resources>
<Grid>
    <telerik:RadDocking>
        <telerik:RadDocking.DocumentHost>
            <DockPanel>
                <telerik:RadTabControl ContentTemplate="{StaticResource ContentTemplate}"
                                       ItemTemplate="{StaticResource HeaderTemplate}"
                                       ItemsSource="{Binding TabCollection}"
                                       SelectedItem="{Binding Path=SelectedItem,
                                                              Mode=OneWayToSource}" />
            </DockPanel>
        </telerik:RadDocking.DocumentHost>
    </telerik:RadDocking>
</Grid>