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を調査してきたが、すべての例は、テキストボックスにしていると私は本当にそれを取得しないでください。今まで私は、次の試してみました:私はコンパイルエラーを与える

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

、ComboBox.SelectedItemはadecuate依存関係プロパティではありませんが発生します。

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

これはコンパイルしますが、Me.cbRad.Selecteditemがnullであるため、このファイルはコンパイルされますが、ランタイムエラーが発生します。

¿コードを使用して宣言されていないかのようにバインディングを削除するにはどうすればよいですか?

+0

データソースをnullに設定するだけですか? –

+0

はい@UsamaZafarですが、xamlで使用されるNotNullValidationルールではnull値を使用できません。それが私がバインディングを削除したい理由です。 – WristMan

答えて

2

は、私はのSelectedItemはインスタンスメソッドであり、それを使用するためには、インスタンスを必要とするため、コンパイルされませんでしたあなたの最初の試みを推測してい

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

を試してみてください。

SelectedItemがObjectを返し、VB.NET(Strictモードでない場合)がパラメータに渡されたオブジェクトをパラメータの型に自動的に強制的に変換しようとするため、VB.NETでコンパイルされた2回目の試行DependencyPropery

SelectedItemがNothing(何らかのクラスのインスタンスとも言えます)でなかった場合、このインスタンスもDependencyPropertyに変換する方法がないため、実行時に失敗します。

ClearBindingDependencyPropertyと一緒に使用することができないため、SelectedItemはNothingであったため、実行時には失敗しました。

あなたが実際に必要とするのは、依存関係プロパティオブジェクト(Selector.SelectedItemProperty)を保持する静的フィールドです。

+0

SelecteditemPropertyはComboBoxのメンバーではないようです – WristMan

+0

助けと説明に感謝します:) – WristMan

関連する問題