将StackPanel.Visibility绑定到其子项的Visibility属性

我是DataBinding的新手,只是阅读它。 我想做的是以下内容:

我有一个包含许多子控件的StackPanel:

 1 2 3  

可以通过代码更改文本框的可见性属性。 现在,如果所有TextBox都设置为Visibility = Collapsed,我还希望StackPanel.Visibility设置为Collapsed,但是如果显示一个或多个TextBox(Visibility = Visible),StackPanel.Visibility也应该设置为Visible。

这可以通过简单的DataBinding实现,还是必须在C#代码中实现此function?

我想不出通过数据绑定直接做到这一点的方法。

我个人会在视图后面有一个视图模型,并将视图DataContext设置为视图模型。

在视图模型中,我将有一个属性告诉视图是否所有文本框都已折叠。 该属性将由代码设置。 然后将stackpanel可见性绑定到该属性。

(该属性必须是依赖属性,否则视图模型必须实现INotifyPropertyChanged才能使视图自动更新)

您是否考虑过将TextBoxes的可见性设置为Hidden ? 这将“隐藏”为TextBox分配的空间。 假设它们在StackPanel中没有其他控件,那么它将不可见。

当然,这个解决方案可能会对您的实现做出一些天真的假设。

如果您需要更复杂的场景,我会尝试以下操作:注意:这是伪造的 – 可能无法编译..

1)使用MultiBinding

          

2)声明转换器

    

3)定义转换器

 public class VisibilityConverter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { Visibility text1Vis = (Visibility)values[0]; Visibility text2Vis = (Visibility)values[1]; Visibility text3Vis = (Visibility)values[2]; if (text1Vis == text2Vis == text3Vis == Visibility.Collapsed) return Visibility.Collapsed; return Visibility.Visible; } }