首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用数据板动态加载雷达窗格和属性网格

使用数据板动态加载雷达窗格和属性网格
EN

Stack Overflow用户
提问于 2016-07-12 07:48:23
回答 1查看 767关注 0票数 1

我正在使用一些telerik组件,并试图执行以下操作:我有一个TabCollection,它是一个可观察到的ConfigurationTab集合,我想为这个集合中的每个ConfigurationTab创建一个radPane (这是我已经管理过的),然后我希望当前选项卡显示一个RadPropertyGrid,我将绑定一个(自定义的)属性集合。

代码如下:(XAML)

代码语言:javascript
复制
<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>

C#

代码语言:javascript
复制
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);
        }
    }

我使用当前代码得到的信息如下所示,选项卡的标题被正确地填充为显示名称,但是窗格的内容只显示的部分:"IOLAN.ModuleConfigurationTester.ConfigurationTab“,这是问题所在:

另外,当我单击第二个选项卡时,我会得到一个空引用异常:

代码语言:javascript
复制
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.

有人能看出我做错了什么吗?

编辑

添加一个有趣的东西,如果我将数据模板更改为一个简单的textbox,它不会改变任何东西,我在rad窗格= "IOLAN.ModuleConfigurationTester.ConfigurationTab“中看到的唯一内容是,我仍然得到一个空引用,试图打开另一个选项卡:

代码语言:javascript
复制
<DataTemplate x:Key="TabCollectionTemplate">
    <telerik:RadPane CanUserClose="False" Header="{Binding DisplayName}">
        <TextBox Text="Hallo" />
    </telerik:RadPane>
</DataTemplate>
EN

回答 1

Stack Overflow用户

发布于 2016-10-03 09:31:04

过了一会儿,我明白了我必须做什么,我只需使用一个TablControl并设置内容模板,这样做就解决了所有的问题:

代码语言:javascript
复制
<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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38322899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档