【发布时间】:2020-03-01 20:42:18
【问题描述】:
我通过以下方式在我的 UI 中创建一些项目
Buttons.cs
[Browsable(true)]
[Display(Order = 1, Name = "Object1", GroupName = "Objects", ResourceType typeof(Resources.DisplayNames) , AutoGenerateField =false)]
public ButtonViewModel Button1{ get; set; }
[Browsable(true)]
[Display(Order = 2, Name = "Object2", GroupName = "Objects", ResourceType typeof(Resources.DisplayNames) , AutoGenerateField =false)]
public ButtonViewModel Button2{ get; set; }
//etc
我试图做的是根据某些条件显示或隐藏这些 UI 元素。 我看到如果我将 AutoGenerateField 设置为 true/false,我会得到想要的结果,有没有办法在运行时设置该值 true/false? (如果可能的话)
还有其他方法可以一起完成吗?就像每次添加/删除显示属性一样。
编辑
PropertyGridView.xaml
<Grid>
<telerik:RadPropertyGrid telerik:StyleManager.Theme="Fluent"
x:Name="PropertyGrid"
IsGrouped="True"
Item="{Binding SelectedItem}"
PropertySetMode="Union"
RenderMode="Flat"
SortAndGroupButtonsVisibility="Collapsed">
</telerik:RadPropertyGrid>
</Grid>
PropertyGridViewModel.cs
public class PropertyGridViewModel : Screen, IPropertyGridViewModel, IHandle<ItemSelectionMessage>
{
private IEventAggregator _eventAggregator;
private IItem _item;
public PropertyGridViewModel(IEventAggregator eventAggregator)
{
_eventAggregator = eventAggregator;
}
protected override void OnActivate()
{
base.OnActivate();
_eventAggregator.Subscribe(this);
}
protected override void OnDeactivate(bool close)
{
base.OnDeactivate(close);
_eventAggregator.Unsubscribe(this);
}
public IItem SelectedItem
{
get
{
return _item;
}
set
{
_item = value;
NotifyOfPropertyChange(() => SelectedItem);
}
}
public void Handle(ItemSelectionMessage message)
{
SelectedItem = message.Item;
}
}
而被传递的项目是上面的Buttons.cs。
【问题讨论】:
-
您需要创建可见性转换器
IValueConverter将您的模型属性转换为元素可见性可能重复stackoverflow.com/questions/14692461/… -
我一开始尝试这样做,但是可见性属性只隐藏/显示按钮,并不会影响通常显示在按钮旁边的名称属性。我不知道是我做错了什么还是我遗漏了一些明显的东西。
-
能否提供您的 xaml 布局,好吗?一般来说,您可以使用按钮和标签隐藏占位符。
-
您可以在运行时添加/删除属性(请参阅stackoverflow.com/questions/14663763/…),但这并不是您想要实现的最佳方式。如果您想同时显示/隐藏多个控件,您可以简单地将它们包装在同一个 StackPanel 中,然后使用 @OlegBondarenko 所说的 IValueConverter 将绑定添加到 Visibility 参数,或者使用设置的 DataTriggers 添加样式它的可见性。
-
我更新了上面的代码,你有什么例子可以说明如何实现你的建议吗?