2015-09-14 4 views
3

Я пытаюсь контролировать видимость PropertyDefinition в Telerik RadPropertyGrid путем привязки к атрибуту Visibility свойства, но похоже, что PropertyDefinition игнорирует изменения этого атрибута.Возможно ли контролировать видимость для Telerik RadPropertyGrid с C#/WPF?

Ниже приведен код XAML элемента управления. Примечание TestVis.

<Window x:Class="SettingsDialog" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation" 
     Title="SettingsDialog" 
     Height="500" 
     Width="330"> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="*" /> 
     </Grid.RowDefinitions> 

     <telerik:RadPropertyGrid 
      Grid.Row="0" 
      x:Name="PropertyGrid" 
      AutoGeneratePropertyDefinitions="False" 
      Item="{Binding}"> 
      <telerik:RadPropertyGrid.PropertyDefinitions> 
       <telerik:PropertyDefinition 
        Binding="{Binding Setting1}" 
        DisplayName="Property 1" 
        Description=""Lorem ipsum dolor sit amet" 
        /> 
       <telerik:PropertyDefinition 
        Binding="{Binding Setting2}" 
        Visibility="{Binding TestVis}" 
        DisplayName="Property 2" 
        Description=""Lorem ipsum dolor sit amet" 
        /> 
      </telerik:RadPropertyGrid.PropertyDefinitions> 
     </telerik:RadPropertyGrid> 
    </Grid> 
</Window> 

Ниже приведен код для этого диалогового окна.

using System.Windows; 

public partial class SettingsDialog : Window 
{ 
    private Visibility _TestVis; 
    public Visibility TestVis 
    { 
     get { return _TestVis; } 
     set 
     { 
     this._TestVis = value; 
     NotifyPropertyChanged("TestVis"); 
     } 
    } 

    public bool Setting1 = { get; set; } 
    public bool Setting2 = { get; set; } 

    public SettingsDialog() 
    { 
     Setting1 = true; 
     Setting2 = true; 
     TestVis = Visibility.Collapsed; 

     InitializeComponent(); 
    } 
} 

Я ожидаю, что это приведет к тому, что «Свойство 2» не будет отображаться, но оно есть. Что я делаю не так?

+0

Я изменил 'назначение TestVis' в конструкторе, чтобы иметь' Visibility' значение вместо Boolean. – Amelamise

ответ

0

Мое решение, к сожалению, не использует привязки. Вам нужно будет указать имя для каждого свойства, которое вы хотите скрыть.

<telerik:PropertyDefinition 
    x:Name="Setting1PropertyDefinition" 
    Binding="{Binding Setting1}" 
    DisplayName="Property 1" 
    Description=""Lorem ipsum dolor sit amet" 
    /> 

Затем в коде позади, используя ссылку на ваш SettingsDialog например:

dialog.Settings1PropertyDefinition.Visibility = Visibility.Collapsed; 
+0

Это именно то, что я искал! – Amelamise

0

Я думаю, что это связано с тем, что ваша привязка находится внутри RadPropertyGrid, и эта привязка не знает, что есть Именованный TestVis, и вам нужен booleanConverter, иначе он не работает должным образом, но поскольку вы являетесь обязательным элементом {binding}.

Я думаю, что это RelativeSource не обязательны

Visibility="{Binding TestVis, 
RelativeSource={RelativeSource AncestorType={x:Typtelerik:RadPropertyGrid}}", 
Converter={StaticResource booleanToVisibilityConverter}}">> 

Добавьте это и он должен работать. и в вашем реестре dictionnary добавить ссылку на преобразователь

<telerik:BooleanToVisibilityConverter x:Key="booleanToVisibilityConverter" /> 
+0

Я просто попробовал это. К сожалению, проблема сохранилась. – Amelamise