2010-01-18 57 views
1

我有一个TreeView和一些其他控件,如TextBox es和ComboBox es。 的TextBox ES绑定到所选的项目,TreeView这样的:WPF有条件绑定

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

这工作正常,如果我TreeView所有元素都具有一个Name属性。

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

if SelectedItem is MyTreeType 
    then bind 
else 
    disable the element 

是否有可能做这样的事情? 现在我只是遇到绑定错误,并且看起来有点脏。我的TreeView是数据绑定的,它有几个不同类型的类,所以我正在寻找某种条件绑定。

谢谢,劳尔

回答

0

嗯,我结束了创建一个“CastingConverter”我在发式,因为我只是用下面的

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

这就是为什么它总是覆盖在您的视图类ToString一个好主意。做到这一点,您可以将TextSelectedItem绑定。

+0

当然是用于显示文本的作品,但它不支持更新Name属性,也如果你有一个不工作很多属性在你的对象上。 – HaxElit 2010-01-18 20:58:22

1

查看使用Model-View ViewModel(MVVM约束参数

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 
} 

然后)设计模式,那么你的绑定代码很简单,逻辑处于可测试的类中。从一开始就有更多的工作要做,但从长远来看往往会导致更少的问题。

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