2011-07-12 10 views
4

私はテキストボックスを実装しました。チェックボックスをオンにしていても、その逆の場合は表示されなくてはなりません。WPFでviewmodelを使用してウィンドウ内にコントロールを表示したり非表示にすることはできませんか?

<TextBox Visibility="{Binding VisiMaxTime}" Height="23" HorizontalAlignment="Left" Margin="165,36,0,0" Text="{Binding Path=MaxTime,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" VerticalAlignment="Top" Width="75" /> 
<CheckBox IsChecked="{Binding MaxTimeIsChecked}" Content="Geen" FontWeight="Bold" Height="16" HorizontalAlignment="Left" Margin="104,39,0,0" Name="checkBox1" VerticalAlignment="Top" /> 

そして、これは私のviewmodelです::ここに は、私の見解である

public bool MaxTimeIsChecked 
     { 
      get { return maxTimeIsChecked; } 
      set 
      { 
       maxTimeIsChecked = value; 
       if (maxTimeIsChecked == true) 
       { 
        VisiMaxTime = Visibility.Hidden; 
        this.Examination.MaxTime = 0; 
       } 

       else 
       VisiMaxTime = Visibility.Visible; 
       OnPropertyChanged("MaxTimeIsChecked"); 
      } 
     } 



private Visibility visiMaxTime; 
     public Visibility VisiMaxTime 
     { 
      get { return visiMaxTime; } 
      set 
      { 
       visiMaxTime = value; 
       OnPropertyChanged("VisiMaxTime"); 
      } 
     }  

だから私は、これは良いと思います、これはユーザーコントロールで動作しますが、今私はウィンドウで働いています。 Visibilityのsetterにブレークポイントを設定すると、うまく動作しますが、テキストボックスは表示されません。誰かが私が間違っていることを知っていますか?私はあなたが双方向に結合必要な想像

おかげ

+0

あなたは 'PropertyChanged'を起こしていますか? – SLaks

+0

はい、visibilityプロパティでそれを編集しました。 – Ruben

+0

コードがUserControlで動作する場合、変更なしでWindowで動作するはずです。私は何か間違ったコードを見ることはできません。実際のコードをコピーしてこの質問に貼り付けましたか? OnPropertyChangedメソッドでブレークポイントを設定して、プロパティの変更が期待通りに行われていることを確認してください。 –

答えて

4

テキストボックスの可視性がチェックボックスに依存する場合は、それを直接バインドしないでください。

<TextBox Visibility="{Binding ElementName=checkBox1,Path=IsChecked,Converter=BooleanToVisibilityConverter}" /> 

あなたは問題がVisiMaxTimeプロパティは、あなただけの、可能性が言われていることMaxTimeIsCheckedプロパティ

private Visibility visiMaxTime;   
public Visibility VisiMaxTime   
{    
      get { return visiMaxTime; }    
      set    
      { 
       if (visiMaxTime == value) 
        return;   
       visiMaxTime = value;     
       OnPropertyChanged("VisiMaxTime"); 
       MaxTimeIsChecked = VisiMaxTime == Visibility.Visible;   
      }   
} 

を更新しないことである可視性

+0

彼はそれを置くとエラーを出します: 'Setプロパティ' System.Windows.Data.Binding.Converter 'が例外をスローしました。行番号「13」および行位置「260」。 私はそれがコンバータであると思う: 私は窓の小道具でこれを持っている:のxmlns:コンバーター= "CLR名前空間:ToetsBeheerTweedeZit.Converters" <コンバータ:BooleanToHiddenVisibility X:キー= "boolToVis2" /> 何が間違っていますか? – Ruben

+0

ああ、私はそれを見つけた、ありがとう! – Ruben

0

<CheckBox IsChecked="{Binding MaxTimeIsChecked, Mode=TwoWay}" … /> 
+0

いいえ、どちらも動作しません – Ruben

0

が正しいあなたのTextBoxのDataContextのですか?

MaxTimeプロパティは、ViewModelでExaminationTime.MaxTimeと設定されており、TextBox.TextバインディングはMaxTimeにバインドされています。 TextBoxのDataContextがViewModelですか、ExaminationTimeですか?

+0

はい、テキストボックスはviewmodelのMaxtimeプロパティにバインドされています。私は検査オブジェクトのmaxtimeを設定しています。 – Ruben

+0

@Ruben質問に投稿したコードはうまくいきます。それは問題を生み出す実際のコードですか? – Rachel

0

にブール値に変換するためにBooleanToVisibilityConverterを使用する必要がありますMaxTimeIsCheckedプロパティにバインドし、BooleanToVisibilityConverterを使用します。

関連する問題