代码之家  ›  专栏  ›  技术社区  ›  HaxElit

WPF条件绑定

  •  1
  • HaxElit  · 技术社区  · 16 年前

    我有一个 TreeView 还有一些其他的控件,比如 TextBox es和 ComboBox 锿。 文本框 已将项目绑定到中的选定项目 树景

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

    树景 有一个 Name 财产。

    我想知道是否有一种方法可以进行某种条件绑定,即:

    if SelectedItem is MyTreeType
        then bind
    else
        disable the element
    

    有可能这样做吗? 现在我刚刚抛出了绑定错误,这看起来有点脏。我的 树景

    谢谢 劳尔

    4 回复  |  直到 15 年前
        1
  •  5
  •   kenwarner    16 年前
        2
  •  1
  •   Robert Rossney    16 年前

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

        3
  •  1
  •   Ian Ringrose    16 年前

    看看如何使用 Model-View ViewModel (MVVM)设计模式,则绑定代码很简单,逻辑位于可测试类中。这是更多的工作开始,但往往导致较少的问题在长期。

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

        4
  •  0
  •   HaxElit    16 年前

    我最终创建了一个“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}}"