WPF条件绑定

时间:2010-01-18 18:27:50

标签: wpf data-binding conditional

我有TreeView和其他一些控件,例如TextBox es和ComboBox es。 TextBox es绑定到TreeView中的所选项目,如下所示:

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

如果TreeView中的所有元素都有Name属性,这样就可以了。

我想知道是否有办法做某种条件绑定会说:

if SelectedItem is MyTreeType
    then bind
else
    disable the element

有可能做这样的事吗? 现在我只是抛出绑定错误而且看起来有点脏。我的TreeView是数据绑定的,并且里面有几种不同类型的类,这就是为什么我在寻找某种条件绑定。

谢谢, 劳尔

4 个答案:

答案 0 :(得分:5)

答案 1 :(得分:1)

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

答案 2 :(得分:1)

使用Model-View ViewModel(MVVM)设计模式,然后您的绑定代码很简单,逻辑在可测试的类中。从一开始就是更多的工作,但从长远来看往往会减少问题。

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

答案 3 :(得分:0)

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