【问题标题】:WPF Remove ComboBox binding dynamicallyWPF 动态删除 ComboBox 绑定
【发布时间】:2017-01-19 19:01:47
【问题描述】:

我在 xaml 中有一个绑定,如果在运行时满足某些条件,我想删除它。这是我的 xaml 中的代码 sn-p:

 <ComboBox x:Name="cbRad" Width="175"
                HorizontalAlignment="Left"
                cl:FrameworkElementUtil.Required="True"
                Height="18"
                VerticalAlignment="Top"
                TabIndex="20"
                DisplayMemberPath="Isotopo" SelectedValue="{Binding Rad}" RenderTransformOrigin="0.247,7.773"
              Grid.Row ="6"
                Grid.Column="3">
            <ComboBox.SelectedItem>
                <Binding Path="Rad">
                    <Binding.ValidationRules>
                        <v:NotNullValidationRules />
                    </Binding.ValidationRules>
                </Binding>
            </ComboBox.SelectedItem>
        </ComboBox>

我已经调查过BindingOperations.ClearBinding,但所有的例子都与文本框有关,我真的不明白。到目前为止,我已经尝试了以下方法:

BindingOperations.ClearBinding(Me.cbRad,ComboBox.SelectedItem)

这给了我一个编译错误,因为 ComboBox.SelectedItem 不是一个适当的依赖属性。

BindingOperations.ClearBinding(Me.cbRad,Me.cbRad.SelectedItem)

这个编译但它给出了一个运行时错误,因为 Me.cbRad.Selecteditem 为空。

¿如何删除绑定,就好像从未使用代码声明过一样?

【问题讨论】:

  • 您是否尝试过将数据源设置为空?
  • 是 @UsamaZafar ,但 xaml 中使用的 NotNullValidation 规则不允许空值。这就是我想删除绑定的原因,

标签: wpf vb.net


【解决方案1】:

试试

BindingOperations.ClearBinding(Me.cbRad, Selector.SelectedItemProperty)

我猜你的第一次尝试没有编译,因为 SelectedItem 是一个实例方法,需要一个实例才能使用它。

您在 VB.NET 中编译的第二次尝试,因为 SelectedItem 返回一个 Object,并且 VB.NET(当不在严格模式下)尝试自动将传递给参数的 Object 强制转换为参数的类型,在本例中为 @ 987654322@.

如果 SelectedItem 不是 Nothing(假设是某个类的实例),这也会在运行时失败,因为无法将该实例转换为 DependencyProperty。

由于 SelectedItem 是 Nothing,它在运行时仍然失败,因为您不能在不使用某些 DependencyProperty 的情况下调用 ClearBinding。

你真正需要的是保存依赖属性对象的静态字段——Selector.SelectedItemProperty。

【讨论】:

  • SelecteditemProperty 似乎不是 ComboBox 的成员
猜你喜欢
  • 2017-11-09
  • 1970-01-01
  • 2011-11-01
  • 2015-04-07
  • 1970-01-01
  • 2014-03-18
  • 2015-06-28
  • 2010-10-24
  • 2013-04-18
相关资源
最近更新 更多