【问题标题】:using a datatemplate to dynamically load radpanes and property grids使用数据模板动态加载 radpanes 和属性网格
【发布时间】:2016-07-12 07:48:23
【问题描述】:

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

代码如下: (XAML)

<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#

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”问题:

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

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.

谁能看到我做错了什么?

编辑

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

<DataTemplate x:Key="TabCollectionTemplate">
    <telerik:RadPane CanUserClose="False" Header="{Binding DisplayName}">
        <TextBox Text="Hallo" />
    </telerik:RadPane>
</DataTemplate>

【问题讨论】:

    标签: c# wpf telerik datatemplate


    【解决方案1】:

    过了一会儿,我弄清楚了我必须做什么,我只需要使用一个 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 2016-01-11
      • 2014-11-23
      • 1970-01-01
      相关资源
      最近更新 更多