2012-02-10 11 views
0

カスタムユーザーコントロール(JCUserControl)を作成してメインウィンドウで使用しています。私のメインウィンドウにはコードビハインドはありません。カスタムユーザーコントロールを使用しているときに、オブジェクト参照がオブジェクトのインスタンスに設定されていません

私はJCUserControlの分離コードでこれを持っている:私はそれを実行すると

Private Sub ImmediateRadioButton_Checked(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles ImmediateRadioButton.Checked 
    SomeTextBox.IsEnabled = False 
End Sub 

、それはとNullReferenceExceptionで失敗します。私がSomeTextBox.IsEnabled = falseをコメントアウトすると、問題なく実行されます。

誰かが助けることができますか?

編集:

私はちょうどラジオボタンは私がやりたいものは何でもやって前にロードされているかどうかを確認できることが分かりました。

プライベートサブは(System.Windows.RoutedEventArgsとしてのSystem.Objectとして、送信者、E)ハンドルImmediateRadioButton.Checked

をImmediateRadioButton_Checked ImmediateRadioButton.IsLoadedその後 SomeTextBox.IsEnabled = Falseの END IF End Subの

答えて

0
の場合

それは明白ではありませんか? がnullの場合、RadioButtonが解析順序の早い方に表示され、チェックされたイベントがTextBoxの終了前に発生する可能性があるため、すべてのコントロールを同時に初期化できない可能性があるため、これが可能です。とにかくこれにもっと近づけるべきです。たとえば、次のようにします。 bindTextBox.IsEnabledRadioButton.IsCheckedを追加するか、新しいブール値プロパティを追加して両方にバインドします。

前者の場合:

<RadioButton Name="rb"/> 
<!-- Apply Binding.Converter as needed, or use a DataTrigger instead --> 
<TextBox IsEnabled="{Binding IsChecked, ElementName=rb}"/> 
+0

宣言的にアプローチする部分についてはあまりよく分かりません。私はvb.netにかなり新しいです。しかし、どのように私はメインウィンドウ内のすべてのコントロールを持っているときに動作する可能性はありますが、それがユーザーコントロールにあるときはそうではありませんか?ご回答有難うございます! :) – will0809

+0

@ will0809:パーザがどのように異なるコントロールを扱うかによって決まるかもしれません。いずれの場合でも、あなたが信頼できるものではありません。私が提供したデータバインディングのリンクを読んでください。これはWPFの重要なメカニズムであり、通常このような問題を避けることができます。 –

+0

ありがとう!それは涼しく見える。 – will0809