我试图通过绑定到属性的PropertyDefinition
属性来控制Telerik RadPropertyGrid
中Visibility
的可见性,但看起来好像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”无法显示,但确实如此。我做错了什么?
答案 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