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

时间:2008-12-03 01:12:36

标签: wpf

这是方案

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

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

5 个答案:

答案 0 :(得分:11)

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

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

答案 1 :(得分:4)

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

答案 2 :(得分:2)

我希望您已在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}”

  4. 一个简单的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了你后面的代码

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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