问题 有没有办法在WPF中逻辑分组控件


这是场景

我有一个带有一些TextBlock控件的Grid,每个控件位于网格中的一个单独的单元格中。从逻辑上讲,我希望能够将它们的可见性设置为绑定到ViewModel中的属性。但由于它们都位于网格中的单独单元格中,因此我必须设置每个TextBlock的Visibility属性。

有没有一种方法可以设置一个非可视组,我可以在其中设置其子项的共同属性?还是我在做梦?


9501
2017-12-03 01:12


起源

是在XAML中还是在代码隐藏中创建了所有TextBlock?如果是后者,那么你可以保留它们的列表并迭代它。 - DaveInCaz


答案:


没有非视觉组可以实现这一目标。

直接或在所有TextBlock共享的公共样式中设置Visibility属性可能是最简单的解决方案。


10
2017-12-03 05:04



你能详细说明吗?我希望小组的可见性与附属财产绑定。 - Shimmy


另一种选择是将项目组中每个项目的可见性属性绑定到一个项目,在您的代码中,您只需要设置一个项目的可见性。


4
2018-03-22 22:18





我希望您已在DataTemplate中定义了所有单元格UI元素。你可以在ViewModel级别做一个小技巧来实现你想要的。

  1. 在ViewModel上有Singleton类,它应具有Visibility或您想要绑定到每个TextBlock的等效属性。
  2. Singleton类应该实现INotifypropertyChanged以获取UI的更改通知
  3. 绑定XAML中的Singleton属性,并从应用程序的任何位置控制此属性。

    <TextBlock Visibility =“{Binding Source = {x:Static local:Singleton.Instance},Path = Visibility}”

一个简单的Singleton类可以实现为

public class Singleton :INotifyPropertyChanged
{
    private Singleton() { }
    public static Singleton Instance
    {
        get
        {
            if (instance == null){ instance = new Singleton(); }
            return instance;
        }
    }
    private Visibility _visibility;
    public Visibility Visibility
    {
        get { return _visibility; }
        set 
        { 
            _visibility = value; 
            PropertyChanged( this, new PropertyChangedEventArgs("Visibility") );
        }
    }
    public event PropertyChangedEventHandler PropertyChanged;
    private static Singleton instance;
 }

现在,您可以控制Singleton.Instance.Visibility = Visibility.Collapsed,从您的代码后面


2
2017-12-03 01:34





可以创建一个自定义控件,将其所有添加/删除子方法重定向到其自己的父级,同时仍保留其内容的记录,以便它可以应用自己的属性样式。虽然会很棘手。


0
2018-01-26 17:19





如果可能的话,我主要将它们放在GroupBox中并将groupbox BorderThickness设置为0.这样所有控件都被分组,你没有看到它是一个组合框,你可以用一个属性设置可见性。

  <Style TargetType="{x:Type GroupBox}"
     x:Key="HiddenGroupBox">
<Setter Property="BorderThickness"
        Value="0" />


0
2018-04-16 07:46