简体   繁体   English

在XAML中绑定

[英]Binding in XAML

I have created three sliders to quickly input data into Windows Store APP. 我创建了三个滑块,可将数据快速输入Windows Store APP。 Range of each slider is 0-9, all together represents a value from range 000 - 999 in TextBox. 每个滑块的范围是0-9,在TextBox中全部代表一个介于000-999之间的值。

I can calculate the value using following Formula 我可以使用以下公式计算值

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

I can simply attach this to every slider's ValueChanged Event, but there is a more elegant way Via XAML Binding. 我可以简单地将其附加到每个滑块的ValueChanged事件,但是通过XAML绑定有一种更优雅的方法。 I created something like this 我创造了这样的东西

public class MyViewModel
{
    public MyViewModel() { }

    public double TotalValue { get; set; }
}

but I cannot access any of sliders. 但我无法访问任何滑块。 Is there any way to pass them as constructor parameters? 有什么方法可以将它们作为构造函数参数传递? Or any other way to perform this binding? 或任何其他方式执行此绑定?

EDIT Adding data context 编辑添加数据上下文

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

Bind every slider value to a property in the viewmodel: 将每个滑块值绑定到视图模型中的属性:

(make sure to implement INotifyPropertyChanged) (确保实现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));
             }
        }
    }

Then, apply the binding to the sliders in this way: 然后,以这种方式将绑定应用于滑块:

<Slider Value="{Binding SliderValue1, Mode=TwoWay}" />

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM