我有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
是数据绑定的,并且里面有几种不同类型的类,这就是为什么我在寻找某种条件绑定。
谢谢, 劳尔
答案 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}}"