这是方案
我有一个带有一些TextBlock控件的Grid,每个控件位于网格中的一个单独的单元格中。从逻辑上讲,我希望能够将它们的可见性设置为绑定到ViewModel中的属性。但由于它们都位于网格中的单独单元格中,因此我必须设置每个TextBlock的Visibility属性。
有没有一种方法可以设置一个非可视组,我可以在其中设置其子项的共同属性?还是我在做梦?
答案 0 :(得分:11)
没有非视觉组可以实现这一目标。
直接或以所有TextBlock共享的公共样式设置Visibility属性可能是最简单的解决方案。
答案 1 :(得分:4)
另一种选择是将项目组中每个项目的可见性属性绑定到一个项目,这样在您后面的代码中只需要设置一个项目的可见性。
答案 2 :(得分:2)
我希望您已在DataTemplate中定义了所有单元格UI元素。你可以在ViewModel级别做一个小技巧来实现你想要的。
绑定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了你后面的代码
答案 3 :(得分:0)
可以创建一个自定义控件,将其所有添加/删除子方法重定向到其父级,同时仍保留其内容的记录,以便它可以应用自己的属性样式。虽然会很棘手。
答案 4 :(得分:0)
如果可能的话,我主要将它们放在GroupBox中并将groupbox BorderThickness设置为0.这样所有控件都会被分组,你不会看到它是一个组合框,你可以用一个属性设置可见性..
<Style TargetType="{x:Type GroupBox}"
x:Key="HiddenGroupBox">
<Setter Property="BorderThickness"
Value="0" />