1

Windows ストア アプリにデータをすばやく入力するための 3 つのスライダーを作成しました。各スライダーの範囲は 0 ~ 9 で、すべて合わせて TextBox の範囲 000 ~ 999 の値を表します。

次の式を使用して値を計算できます

int result = Slider1.Value * 100 + Slider2.Value * 10 + Slider3.Value;

これをすべてのスライダーの ValueChanged イベントに単純にアタッチすることができますが、XAML バインディングを介したより洗練された方法があります。私はこのようなものを作成しました

public class MyViewModel
{
    public MyViewModel() { }

    public double TotalValue { get; set; }
}

しかし、どのスライダーにもアクセスできません。それらをコンストラクターのパラメーターとして渡す方法はありますか? または、このバインディングを実行する他の方法はありますか?

EDIT データコンテキストの追加

<Page.DataContext>
    <local:MyViewModel/>
</Page.DataContext>
4

1 に答える 1

1

すべてのスライダー値をビューモデルのプロパティにバインドします。

(必ず INotifyPropertyChanged を実装してください)

public class MyViewModel:INotifyPropertyChanged
    {
        public MyViewModel()
        {

        }

        private double valueSlider1;
        public double ValueSlider1
        {
           get { return valueSlider1; }
           set
           {
              valueSlider1 = value;
              RaisePropertyChanged("ValueSlider1");
              RaisePropertyChanged("TotalValue ");
           }
        }
        private double valueSlider2;
        public double ValueSlider2
        {
           get { return valueSlider2; }
           set
           {
              valueSlider2 = value;
              RaisePropertyChanged("ValueSlider2");
              RaisePropertyChanged("TotalValue ");
           }
        }
        private double valueSlider3;
        public double ValueSlider3
        {
           get { return valueSlider3; }
           set
           {
              valueSlider3 = value;
              RaisePropertyChanged("ValueSlider3");
              RaisePropertyChanged("TotalValue ");
           }
        }
        public double TotalValue
        {
           get { return ValueSlider1*100+ValueSlider2*10+ValueSlider3; }
        }

        public event PropertyChangedEventHandler PropertyChanged;
        private void RaisePropertyChanged(string propertyName)
        {
             var handler = this.PropertyChanged;
             if (handler != null)
             {
                handler(this, new PropertyChangedEventArgs(propertyName));
             }
        }
    }

次に、次の方法でバインディングをスライダーに適用します。

<Slider Value="{Binding SliderValue1, Mode=TwoWay}" />
于 2013-11-12T10:13:18.237 に答える