【问题标题】:Is it possible to control visibility for a Telerik RadPropertyGrid with C#/WPF?是否可以使用 C#/WPF 控制 Telerik RadPropertyGrid 的可见性?
【发布时间】:2015-09-14 17:14:02
【问题描述】:

我试图通过绑定到属性的 Visibility 属性来控制 Telerik RadPropertyGridPropertyDefinition 的可见性,但似乎 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”不显示,但它确实存在。我做错了什么?

【问题讨论】:

  • 我将构造函数中的TestVis 赋值改为Visibility 值而不是布尔值。

标签: c# wpf telerik radgrid


【解决方案1】:

不幸的是,我的解决方案不使用绑定。您必须为希望能够隐藏的每个属性指定一个名称。

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

然后在后面的代码中使用对您的SettingsDialog 实例的引用:

dialog.Settings1PropertyDefinition.Visibility = Visibility.Collapsed;

【讨论】:

  • 这正是我想要的!
【解决方案2】:

我认为这是因为您的绑定在 RadPropertyGrid 内部,并且此绑定不知道有一个名为 TestVis 的属性,您还需要一个 booleanConverter 否则它无法正常工作,但是因为您正在绑定项目 {binding}。

我认为RelativeSource不是必须的

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

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

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

【讨论】:

  • 我刚试过这个。不幸的是,问题仍然存在。
猜你喜欢
  • 2012-07-17
  • 1970-01-01
  • 2012-06-12
  • 1970-01-01
  • 1970-01-01
  • 2011-10-12
  • 2011-08-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多