2016-04-18 17 views
0

私はVS 2015でWPFアプリケーションをプログラミングしています。 私のウィンドウには、FontWeights.BoldとFontWeights.Normalを切り替えるためのTextBoxとToggleButtonがあります。 私のViewModelには2つのプロパティがあります。 1つはToggleButtonのIsCheckedプロパティ用で、もう1つはTextBoxのFontWeight用です。依存プロパティのRaisePropertyChangedは一度だけ呼び出されます

/// <summary> 
/// Gets or sets if the button setFontBold is checked. 
/// </summary> 
private bool? setFontBoldIsChecked = false; 
public bool? SetFontBoldIsChecked 
{ 
    get { return setFontBoldIsChecked; } 
    set 
    { 
     setFontBoldIsChecked = value; 
     RaisePropertyChanged("SetFontBoldIsChecked"); 
     RaisePropertyChanged("TextFontWeight"); 
    } 
} 

/// <summary> 
/// Gets the fontweight depending on SetFontBoldIsChecked. 
/// </summary> 
public FontWeight TextFontWeight 
{ 
    get { return (setFontBoldIsChecked == true) ? FontWeights.Bold : FontWeights.Normal; } 
} 

のTextBoxのfontWeightが、プロパティがそのようにバインドされている:

<TextBox x:Name="textbox1" FontWeight="{Binding TextFontWeight}"/> 

そして、トグルボタンのにisChecked-プロパティがSetFontBoldIsCheckedにバインドされています

<ToggleButton x:Name="setFontBold" IsChecked="{Binding SetFontBoldIsChecked}"/> 

私が起動すると、トグルボタンをクリックすると、IsEnabledがtrueになり、テキストが太字で表示されます。 しかし、もう一度試してみると、RaisePropertyChanged( "TextFontWeight")ではTextFontWeightのGetterが呼び出されません。

どうしてですか?

ありがとうございます! パトリック

+0

それは私のために働く。あなたが私たちに示していないものがなければなりません。 – Clemens

+0

多分問題は次のようなものです: ツールボックスからドラッグ&ドロップコントロール(Labelのような)を持つMainWindowを持っています。 ドロップ後、ToggleButtonとTextBox(プレビュー用)を含むプロパティ設定ウィンドウが開きます。 プロパティを調整してTextBoxで結果を確認した後、私はそれを確認し、ウィンドウは閉じずに非表示コマンドで非表示にします。 ウィンドウを隠す前に、ViewModelのすべてのプロパティをデフォルト値にリセットします。 これは、SetFontBoldIsChecked = falseを意味します。 次のコントロールをドロップすると、設定ウィンドウが再度表示され、RaiseはTextFontWeightのGetterを起動しません。 –

答えて

0

私はそれを見つけました! XAMLで すべての属性を設定する必要があります。

<TextBox x:Name="textForTextProperty" FontWeight="{Binding TextFontWeight, Mode=TwoWay, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}"/> 

をとのviewmodelのプロパティは、少し変更する必要があります。

/// <summary> 
/// Gets or sets if the button setFontBold is checked. 
/// </summary> 
private bool? setFontBoldIsChecked = false; 
public bool? SetFontBoldIsChecked 
{ 
    get { return setFontBoldIsChecked; } 
    set 
    { 
     setFontBoldIsChecked = value; 
     RaisePropertyChanged("SetFontBoldIsChecked"); 
     RaisePropertyChanged("TextFontWeight"); 
    } 
} 

/// <summary> 
/// Gets the fontweight depending on SetFontBoldIsChecked. 
/// </summary> 
private FontWeight textFontWeight; 
public FontWeight TextFontWeight 
{ 
    //get { return textFontWeight; } 
    get 
    { 
     textFontWeight = (SetFontBoldIsChecked == true) ? FontWeights.Bold : FontWeights.Normal; 
     return textFontWeight; 
    } 
    set 
    { 
     textFontWeight = value; 
     RaisePropertyChanged("TextFontWeight"); 
    } 
} 

は、今では動作します。

関連する問題