Я использую некоторые компоненты 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», который является проблемой:
Кроме того, когда я нажимаю на вкладке 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>