当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《将StackPanel.Visibility绑定到其子项的Visibility属性》经验,为你挑选了2个好方法。

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

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

        
            1
            2
            3
        

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

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



1> Kjetil Watne..:

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

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

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

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



2> Brad Leach..:

您是否考虑过将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;
  }
}


小错误:Converter = {StaticResource visibilityConverter}应该使用MultiBinding.Bindings而不是Visibility
推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有