【问题标题】:Binding in XAMLXAML 中的绑定
【发布时间】:2013-11-12 09:49:05
【问题描述】:

我创建了三个滑块来快速将数据输入到 Windows Store APP。 每个滑块的范围是 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; }
}

但我无法访问任何滑块。有没有办法将它们作为构造函数参数传递?或任何其他方式来执行此绑定?

编辑 添加数据上下文

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

【问题讨论】:

  • 您能向我们展示您的 XAML 吗?并指定设置哪些 DataContexts 以及如何设置(如果可能)

标签: c# xaml windows-store-apps


【解决方案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}" />

【讨论】:

  • 当前上下文中不存在名称“RaisePropertyChanged”
  • @user2847238 - 您需要实现INotifyPropertyChanged interface 成员。
  • @user2847238 正如我所说,您需要实现 INotifyPropertyChanged 并提供引发事件的方法 (RaisePropertyChanged)
  • @Alberto - 也许您可以为user2847238 提供一个如何在您的答案中实现INotifyPropertyChanged 的示例?也可能对其他人也有好处。
  • @Veleous 我添加了 INotifyPropertyChanged 的​​实现
猜你喜欢
  • 1970-01-01
  • 2015-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多