【问题标题】:WPF Conditional BindingWPF 条件绑定
【发布时间】:2011-01-06 11:47:58
【问题描述】:

我有一个 TreeView 和几个其他控件,例如 TextBoxes 和 ComboBoxes。 TextBoxes 绑定到 TreeView 中的选定项,如下所示:

Text="{Binding SelectedItem.Name, ElementName=groupTreeView}"

如果我的TreeView 中的所有元素都具有Name 属性,则此方法可以正常工作。

我想知道是否有办法进行某种条件绑定,它会说:

if SelectedItem is MyTreeType
    then bind
else
    disable the element

有可能做这样的事情吗? 现在我只是抛出绑定错误,这似乎有点脏。我的TreeView 是数据绑定的,其中有几个不同类型的类,所以这就是我寻找某种条件绑定的原因。

谢谢, 劳尔

【问题讨论】:

    标签: wpf data-binding conditional


    【解决方案1】:

    【讨论】:

      【解决方案2】:

      这就是为什么在视图类中覆盖ToString 总是一个好主意。这样做,您可以将Text 绑定到SelectedItem

      【讨论】:

      • 当然可以显示文本,但它不支持更新 Name 属性,如果你的对象上有很多属性,它也不起作用。
      【解决方案3】:

      看看使用Model-View ViewModel (MVVM) 设计模式,那么你的绑定代码很简单,逻辑在一个可测试的类中。一开始需要做更多的工作,但从长远来看往往会导致更少的问题。

      这是一个非常好的视频,你应该看看:Jason Dolinger on Model-View-ViewModel

      【讨论】:

        【解决方案4】:

        我最终创建了一个“CastingConverter”,我将类型作为参数发送

        public class CastingConverter : IValueConverter
        {
            #region IValueConverter Members
        
            public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                if (value == null)
                    return null;
        
                if (parameter == null)
                    throw new ArgumentNullException("parameter");
        
                var type = parameter as Type;
        
                if (type == null)
                    throw new ArgumentException("parameter must be a type");
        
                var itemType = value.GetType();
        
                if (type.IsAssignableFrom(itemType))
                    return value;
        
                return null;
            }
        
            public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                throw new NotImplementedException();
            }
        
            #endregion
        }
        

        那我就跟下面的绑定了

        DataContext="{Binding SelectedItem, ElementName=groupTreeView, Converter={StaticResource CastingConverter}, ConverterParameter={x:Type vm:GroupViewModel}}"
        

        【讨论】:

          猜你喜欢
          • 2013-09-04
          • 2014-05-17
          • 2017-07-05
          • 2011-02-23
          • 1970-01-01
          • 2010-10-30
          • 2014-06-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多