WPF动态删除ComboBox绑定

时间:2016-03-29 10:37:04

标签: wpf vb.net

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

 <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,但所有的例子都是Textboxes,我真的没有。到现在为止,我尝试了以下内容:

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

这给了我一个编译错误,导致ComboBox.SelectedItem不是一个合适的依赖属性。

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

这个编译但是它会产生运行时错误,因为Me.cbRad.Selecteditem为空。

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

1 个答案:

答案 0 :(得分:2)

尝试

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

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

您的第二次尝试是在VB.NET中编译的,因为SelectedItem返回一个Object,而VB.NET(当不处于Strict模式时)会尝试自动将传递给参数的Object强制转换为参数类型,在本例中为{ {1}}。

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

由于SelectedItem为Nothing,因此在运行时仍然失败,因为如果不使用某些SelectedItem,就无法调用ClearBinding

实际需要的是保存依赖项属性对象的静态字段 - Selector.SelectedItemProperty。