2016-07-12 4 views
0

Я использую некоторые компоненты Telerik, и я пытаюсь сделать следующее: У меня есть TabCollection, который является наблюдаемой коллекцией ConfigurationTab Я хочу создать radPane для каждого ConfigurationTab в эта коллекция (это я управлял вроде), тогда я хочу, чтобы текущая вкладка отображала RadPropertyGrid, к которой я привяжу (пользовательскую) коллекцию свойств.с помощью DataTemplate для динамической загрузки radpanes и сетки свойств

Код выглядит следующим образом: (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», который является проблемой: enter image description here

Кроме того, когда я нажимаю на вкладке 2-я получаю нулевое ссылочное исключение:

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. 

Может кто-нибудь увидеть, что я делаю неправильно?

EDIT

Интересная вещь, чтобы добавить, если я изменить шаблон данных для простого текстового поля Это ничего не меняет, единственное, что я вижу в radpane = «IOLAN.ModuleConfigurationTester.ConfigurationTab» и я до сих пор получить ссылку на нулевой попытке открыть другую вкладку:

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

ответ

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> 

 Смежные вопросы

  • Нет связанных вопросов^_^