2011-02-03 13 views
3

ToggleButtonはICommandをサポートしていますので、TogglePlayPause、ToggleMuteなどのコマンドを多数作成しても問題ありませんが、IsCheckedプロパティをバインドしてチェック状態が常に正しい状態になるようにする必要があります。 ToggleButtonのOneWayバインディングモードを作成し、ToggleButtonを押すとバインディングが失われます。OneWayがToggleButton IsCheckedプロパティにバインドできないのはなぜですか?

なぜToggleButtonはICommandをサポートしていますが、OneWayバインディングをサポートしていないのはなぜですか? TwoWayバインディングを設定することはできますが、ToggleButtonがCommandを使用すると、実際の操作がTwoWayバインディングと重複しないようにしてください。私の場合は Command = TogglePlayPause IsChecked = {Bind to IsMediaPlaying} IsMediaPlayingは読み取り専用でなければなりません。

ToggleButtonをCommandで使用してIsCheckedプロパティをバインドする方法を教えてください。

答えて

3

あなたはToggleButtonから派生させ、独自のOneWayToggleButtonを書いて、ボタンがクリックされたときに何が起こるかをオーバーライドすることができます。

public class OneWayToggleButton : ToggleButton 
{ 
    protected override void OnClick() 
    { 
     RaiseEvent(new RoutedEventArgs(ClickEvent, this)); 
     if (Command != null && Command.CanExecute(CommandParameter)) 
      Command.Execute(CommandParameter); 
    } 
} 

、その後IsCheckedは、ボタン自体によって変更されることはありませんとだけで変更できます結合。しかし、ToggleButtonIsCheckedプロパティをまだ使用しているため、コントロールは正常に動作し、正常に動作します。

+0

私はこれを使用できません。なぜなら、他の人が作成したインターフェースであり、DLLを持っているからです。私は自分の上書きクラスを使用することができないように、コードで動的バインドを行います。 – Madnik7G

+0

次に、独自の中間プロパティで双方向バインディングを行い、バインドによって変更されたときに正しい値に戻します。 –

+0

実際、私は既に空のセットアセスメントではない2ウェイバインディングを適用していますが、それはうまくいくように見えますが、ToggleButtonのフレームワークの読み込み専用のプロパティをすべて変更する必要があります。 他の方法がない場合、Silverlightチームはこの問題を解決する必要があります。 – Madnik7G

関連する問題