Установка IsEnabled на RadTreeViewItem через привязку стиля - PullRequest
2 голосов
/ 24 февраля 2011

Я связываю иерархическую коллекцию с RadTreeView , отлично работает. Теперь я хочу отключить элементы, основываясь на значении логического свойства PermissionID.

Когда я пытаюсь это сделать, InitializeComponent моего модуля (это приложение PRISM) завершается с ошибкой:

{System.Windows.Markup.XamlParseException: Set property '' threw an exception. [Line: 19 Position: 48] ---> System.NotSupportedException: Cannot set read-only property ''.
   at MS.Internal.XamlMemberInfo.SetValue(Object target, Object value)
   at MS.Internal.XamlManagedRuntimeRPInvokes.SetValue(XamlTypeToken inType, XamlQualifiedObject& inObj, XamlPropertyToken inProperty, XamlQualifiedObject& inValue)
   --- End of inner exception stack trace ---
   at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)
   at InventoryModule.Views.NavigationView.InventoryNavigation.InitializeComponent()
   at InventoryModule.Views.NavigationView.InventoryNavigation..ctor()}

Похоже, что это говорит о том, что свойство IsEnabled доступно только для чтения, но это не так.

Вот мой XAML:

<UserControl.Resources>
        <telerik:HierarchicalDataTemplate x:Key="ItemTemplate" ItemsSource="{Binding vw_Module_Access_Permissions_1}">
            <TextBlock Text="{Binding Module_Function_Caption}" />
        </telerik:HierarchicalDataTemplate>
        <Style x:Key="ItemContainerStyle" TargetType="telerikNavigation:RadTreeViewItem">
            <Setter Property="IsExpanded" Value="True"/>
            <Setter Property="IsEnabled" Value="{Binding Path=PermissionID}" />
        </Style>
    </UserControl.Resources>

    <Grid x:Name="LayoutRoot" Background="White">
        <telerikNavigation:RadTreeView x:Name="InventoryNavigationTree" ItemContainerStyle="{StaticResource ItemContainerStyle}" ItemsSource="{Binding SecuredModuleFunctions}"
                                       ItemTemplate="{StaticResource ItemTemplate}">
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="MouseLeftButtonUp">
                    <inf:InvokeDelegateCommandAction Command="{Binding OpenView}" CommandParameter="{Binding ElementName=InventoryNavigationTree, Path=SelectedItem}"></inf:InvokeDelegateCommandAction>
                </i:EventTrigger>
            </i:Interaction.Triggers>
        </telerikNavigation:RadTreeView>

    </Grid>

1 Ответ

2 голосов
/ 25 февраля 2011

Это Silverlight?

В Silverlight пока нет привязок стилей (в Silverlight 5.0)

Telerik имеет «Привязки контейнера», которые действуют аналогичным образом, но задаются на шаблоне данных, а не на стиле:

http://www.telerik.com/support/kb/silverlight/treeview/radtreeview-and-hierarchicaldatatemplate.aspx

Из своих документов:

<telerik:ContainerBindingCollection x:Name="BindingsCollection">  
    <telerik:ContainerBinding PropertyName="IsSelected" Binding="{Binding Selected, Mode=TwoWay}" />  
    <telerik:ContainerBinding PropertyName="IsExpanded" Binding="{Binding Expanded, Mode=TwoWay}" />  
</telerik:ContainerBindingCollection>  

И затем это присоединяется к DataTemplate:

telerik:ContainerBinding.ContainerBindings="{StaticResource BindingsCollection}" 

Надеюсь, это будет работать в вашем случае

...