【问题标题】:SL 4: bind tabitem visibility to checkboxSL 4:将 tabitem 可见性绑定到复选框
【发布时间】:2011-08-26 18:54:45
【问题描述】:


当我创建一个新的 TabItem 时,我会同时创建一个新的 CheckBox。
我想将 TabItem 的可见性绑定到 CheckBox,但无法设置绑定。

                CheckBox cb = new CheckBox();
                cb.Content = tabItemName;
                cb.Name = tabItemName;

                var visibilityBinding = new Binding("IsChecked");
                visibilityBinding.Mode = BindingMode.TwoWay;
                visibilityBinding.ElementName = cb.Name;  // this could just be a string literal 
                visibilityBinding.Converter = new VisibilityConverter();
                m.TabItem.SetBinding(TabItem.VisibilityProperty, visibilityBinding);

                cb.IsChecked = true;

在运行时出现此错误:
System.Windows.Data 错误:BindingExpression 路径错误:在“Telerik.Windows.Controls.RadTabItem”“Telerik.Windows.Controls.RadTabItem”(HashCode=66442352)上找不到“IsChecked”属性。 BindingExpression: Path='IsChecked' DataItem='Telerik.Windows.Controls.RadTabItem' (HashCode=66442352);目标元素是'Telerik.Windows.Controls.RadTabItem'(名称='Central ...');目标属性是“可见性”(类型“System.Windows.Visibility”)..

我做错了什么?我认为 Binding ctor 的参数是源对象(CheckBox)上的属性,该属性绑定到 SetBinding() 调用中命名的属性。

感谢您的建议...

更新
我加了
可见性绑定.Source = cb;

并在运行时收到此错误:
使用 Binding.Source 时无法设置 Binding.RelativeSource

【问题讨论】:

  • 为什么不在 XAML 中做呢?
  • 因为用户可以在运行时创建额外的 TabItems。

标签: silverlight-4.0 binding


【解决方案1】:

Binding.Source() 是编程绑定所必需的,并且是 Binding.ElementName 独有的。
所以,这行得通:

var visibilityBinding = new Binding("IsChecked");
visibilityBinding.Source = cb;
visibilityBinding.Mode = BindingMode.TwoWay;
// visibilityBinding.ElementName = cb.Name; 
visibilityBinding.Converter = new VisibilityConverter();
m.TabItem.SetBinding(RadTabItem.VisibilityProperty, visibilityBinding);

希望这对其他人有所帮助....

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-22
    • 2014-01-25
    • 2021-10-17
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多