1

私はWPFに非常に慣れていないので、優しくしてください。

これは簡単なはずですが、何かが足りないだけです。いくつかのクラス/プロパティに INotifyPropertyChanged を実装し、それらを XAML の要素にバインドし始めましたが、もう少し複雑なバインドを作成してからテキストを更新したり、色を変更したりしています。オブジェクトの Alarm プロパティが true に設定されている場合、色を変更し、アニメーションを開始し、コントロール内の他の要素を作成して表示する必要があります。プロパティが変更されたときにコントロールで関数を呼び出すことができると思っていましたが、WPF は要素がモデルのプロパティにどのように「バインド」されているかを隠しているため、それを接続する方法がわかりません。プロパティの変更に対して、この種のより複雑な応答を実行するためのより良い方法はありますか? そうでない場合、そこにサンプルはありますか?探しているものに近いものは見つかりませんでしたが、正しい用語で検索していない可能性があります。

4

5 に答える 5

1

オブジェクトの Alarm プロパティが true に設定されている場合、色を変更し、アニメーションを開始し、コントロール内の他の要素を作成して表示する必要があります。

  • 色の変更: 色を変更したい要素の Color/Foreground をアラームを設定するブール値にバインドし、ブール値に基づいてIValueConvertera を返すバインディングに an を追加します。Brush
  • アニメーションを開始する:アニメーション化する必要がある要素で (データ) トリガーを使用し、そのトリガーで、ストーリーボードを使用して必要なアニメーションを定義します。
  • コントロールに他の要素を作成して表示します。これは、MVVM をどれだけうまく実行したかに大きく依存します。要素が/ /ObservableCollectionを介したの視覚化である場合(そうあるべきです)、をアラームのオン/オフを設定するものに接続します ( Button クラスには Command プロパティが組み込まれています。他の s ではSystem.Windows.Interactivityの使用が必要になる場合があります)。これが指すメソッドで、新しい項目を に追加すると、新しい項目を追加することで変更が自動的に反映されます。コントロール。ListBoxListViewItemsControlCommandUIElementCommandObservableCollectionItemsControl

もちろん、これは生の情報にすぎません。おそらく、これらすべてのことに慣れていないでしょう。そこで Google の出番です ;)

HTH、

バブ。

于 2012-04-05T18:46:13.673 に答える
0

タイマー/アラームは、経過時にバインドされたプロパティを更新するだけで済みます。次に、プロパティは PropertyChanged イベントを発生させて、更新するよう GUI に通知する必要があります。

于 2012-04-05T17:57:04.407 に答える
0

プロパティが変更されたイベントに応答する複雑な動作については、次のアプローチを使用する必要があります。

class MyClass : INotifyPropertyChanged
{    
    //Presumably you've already done this part
    private object _myProperty = null;
    public object MyProperty
    {
        get { return _myProperty; }
        set
        {
            _myProperty = value;
            NotifyPropertyChanged("MyProperty");
        }
    }

    public MyClass()
    {
        this.PropertyChanged += My_PropertyChanged;
    }

    private void My_PropertyChanged( object sender, PropertyChangedEventArgs e)
    {
        if( e.PropertyName == "MyProperty" )
        {
            //Do Something complicated
        }
    }
于 2012-04-05T18:55:13.943 に答える
0

私はあなたがこれを正しく見ているとは思わない。クラスにはロジックがあり、計算を行い、制約を適用し、プロパティ間の関係を適用します。アラームが発生した場合は、これに対処するためのビジネス ロジックがいくつかあることを願っています。これは (UI ではなく) クラスで実行する必要があります。UI は、アラームを処理するために構築されたものではなく、そのアラームのステータスとアクションを表示するために構築されたものです。アラーム状況で新しいコントロールを表示し、他のコントロールを非表示にします。アニメーションでは、アニメーションを開始するためにリッスンするイベントをスローしたいと思うかもしれません。アラームがスローされたときに追加のハンドルを登録できるという考えがあります。ビジネス ロジックを UI から分離する必要があります (ビジネス ロジックを UI にプルするのではありません)。

于 2012-04-05T20:54:39.890 に答える
0

ビュー モデルでプロパティが変更されたときに発生する DataTriggers を確認する必要があります。EnterActions と ExitActions を使用すると、プロパティの値が変化したときに Storyboard を再生できます。MSDNの使用方法の例を次に示します。コンテンツ コントロールを使用して Template または ContentTemplate のスタイルを設定し、すべての要素を追加して、他の要素の可視性または不透明度を制御することができます。

于 2012-04-05T18:28:01.717 に答える