是否可以使用C#/ WPF控制Telerik RadPropertyGrid的可见性?

时间:2015-09-14 17:14:02

标签: c# wpf telerik radgrid

我试图通过绑定到属性的PropertyDefinition属性来控制Telerik RadPropertyGridVisibility的可见性,但看起来好像PropertyDefinition忽略了对该属性的更改。

控件的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();
   }
}

我希望这会导致“Property 2”无法显示,但确实如此。我做错了什么?

2 个答案:

答案 0 :(得分:0)

我认为这是因为你的绑定在RadPropertyGrid里面而且这个绑定不知道有一个属性命名为TestVis你也需要一个booleanConverter,或者它不能正常工作,但是因为你绑定了项{binding}。

我认为RelativeSource不是必需的

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

添加它,它应该工作。并在您的资源词典中添加对转换器的引用

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

答案 1 :(得分:0)

遗憾的是,我的解决方案不使用绑定。您必须为要隐藏的每个属性指定名称。

protected void SqlDataSource2_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
{
    e.Command.CommandTimeout = 60;
}

然后在后面的代码中使用对<telerik:PropertyDefinition x:Name="Setting1PropertyDefinition" Binding="{Binding Setting1}" DisplayName="Property 1" Description=""Lorem ipsum dolor sit amet" /> 实例的引用:

SettingsDialog