2016-03-29 5 views
0

У меня есть привязка в xaml, которую я хотел бы удалить, если некоторые условия выполняются во время работы. Это фрагмент кода из моего XAML:WPF Удалить динамическое связывание с ComboBox

<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 не является собственность adecuate зависимости.

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

Это один компилирует, но он дает ошибку времени выполнения, потому что Me.cbRad.Selecteditem является недействительным.

¿Как удалить привязку, как если бы она не была объявлена ​​с использованием кода?

+0

Вы пробовали Просто установить источник данных на нуль? –

+0

Да @UsamaZafar, но правило NotNullValidation, используемое в xaml, не допускает нулевые значения. Вот почему я хотел бы удалить привязку, – WristMan

ответ

2

Попробуйте

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

Я предполагаю, что ваша первая попытка не компилировать, потому что SelectedItem является метод экземпляра и требует экземпляра для того, чтобы использовать его.

Ваша вторая попытка, скомпилированная в VB.NET, потому что SelectedItem возвращает объект, а VB.NET (когда не в строгом режиме) пытается автоматически принудить объект, переданный в параметр к типу параметра, в этом случае DependencyPropery.

Если SelectedItem не было бы ничто (скажем, экземпляр какого-либо класса), это также потерпело бы неудачу во время выполнения, потому что не было способа преобразовать этот экземпляр в DependencyProperty.

С SelectedItem ничего не было, все еще не удалось во время выполнения, потому что вы не можете позвонить ClearBinding без работы с некоторыми DependencyProperty.

Что вам действительно нужно, это статическое поле, содержащее объект свойства зависимостей - Selector.SelectedItemProperty.

+0

SelecteditemProperty, похоже, не является членом ComboBox – WristMan

+0

Да, спасибо за помощь и объяснение :) – WristMan

Смежные вопросы