1

Silverlight4を使用します。

コントロールには2つの視覚的な状態があります。状態が変化したときに、フォーカスをあるテキストボックスから別のテキストボックスに変更したいと思います。

MVVMを使用してこれを行うための最良の方法は何ですか?

私はそれまたは振る舞いをするためにvisualstatemanagerを使用することを望んでいました...しかし私は方法を理解していません。

4

3 に答える 3

4

私があなたなら、FocusBehavior.IsFocused プロパティを使用して FocusBehaviour を作成し、その動作をコントロールに追加し、VSM 状態で IsFocused=True を設定します。

于 2010-04-22T16:37:36.663 に答える
1

テキスト ボックス間のフォーカスの変更は、間違いなくビュー固有のコードであるため、おそらくビューのコード ビハインドで行う必要があると思います。コードをまったく持たないことを提案する人もいますが、それは少し誇張されていると思います。

ViewModel からトリガーする方法については、次のようにします。

class MyView : UserControl {

    // gets or sets the viewmodel attached to the view
    public MyViewModel ViewModel {
        get {...}
        set {
           // ... whatever method you're using for attaching the
           // viewmodel to a view
           myViewModel = value;
           myViewModel.PropertyChanged += ViewModel_PropertyChanged;
    }

    private void ViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e) {
        if (e.PropertyName == "State") {
            VisualStateManager.GoToState(this, ViewModel.State, true);
            if (ViewModel.State == "FirstState") {
                textBox1.Focus();
            }
            else if (ViewModel.State == "SecondState") {
                textBox2.Focus();
            }
        }
    }

}

class MyViewModel : INotifyPropertyChanged {

    // gets the current state of the viewmodel
    public string State {
        get { ... }
        private set { ... } // with PropertyChanged event
    }

    // replace this method with whatever triggers your
    // state change, such as a command handler
    public void ToggleState() {
        if (State == "SecondState") { State = "FirstState"; }
        else { State = "SecondState"; }
    }

}
于 2010-04-22T13:53:14.630 に答える
0

C#er ブログのソリューションは JustinAngle の回答とかなり似ていますが、言及する必要がある Silverlight 固有のソリューションであるため、私は理解しました。基本的に、Jeremy Likeness は、FocusBehavior と非常によく似た動作をする、FocusHelper と呼ばれるダミー コントロールを作成します。

于 2013-02-18T04:27:30.270 に答える