WPF之Binding--01(快速入门与理解)

先举个小例子:

  • 现在我有一个Slider和一个Textbox。我希望在滑动Slider的时候,Textbox实时显示Slider的Value属性的值。该怎么办呢?
    XAML代码如下:
<StackPanel>
      <TextBox x:Name="t1" Text="{Binding Path=Value, ElementName=s1,,Mode=TwoWay}"/>
      <Slider x:Name="s1" Minimum="0" Maximum="100" />
  </StackPanel>

与上述等价的C#代码为:

        t1.SetBinding(TextBox.TextProperty, new Binding("Value") { ElementName = "s1" });

还可以这样写:

            Binding binding = new Binding();
            binding.Path = new PropertyPath("Value");
            binding.Source = s1;
            t1.SetBinding(TextBox.TextProperty, binding);

详解

Path

  • Binding是什么呢?假使窗体上有三个控件Textbox,Textbox和Slider。它们的Name属性分别为A,B,C。可以做出这样的设想:将控件想象成岛屿,控件与控件存在着河流。现在,我希望在A岛和B岛之间架设一座桥梁。 这样,两岸的数据便可以实现交流。这座“桥梁”就是Binding。
  • 那么,Path又在其中起什么作用呢?我们继续想象:如果要建设一个连接两个岛屿的桥,总是要事先规定好起点和终点吧。那么又是什么能作为“桥梁”起点和终点呢?答案就是控件的属性。比如Textbox控件的Text属性就可以作为起点。当然,Text下的Length也是属性,它可以作为终点进行设定。据此,可以有如下代码:
<StackPanel>
      <TextBox x:Name="t1" />
      <TextBox x:Name="t2" Text="{Binding Path=Text.Length,ElementName=t1,Mode=OneWay}"/>
  </StackPanel>

上述代码所要实现的效果就是:当我在t1中输入字符,t2就能实时显示t1中字符的长度。

ElementName

还是以岛屿和桥梁举例。ElementName的作用就是指出你欲将桥架向哪座岛屿。

Mode

此参数用于设定桥梁上的数据流向。比如Slider的例子就是一个双向流通的模式。即:我滑动Slider,Textbox会显示Slider此时的Value属性值。反过来,我在Textbox中输入值,Slider也会自动跳到相应位置。
又比如上述Text.Length的例子,这里显然双向流通模式就不适用了,故将其设为单线流通模式。即:数据只会从t1的Text属性流出,t2也只会接受数据而不会发送数据。

发布了19 篇原创文章 · 获赞 3 · 访问量 6897

猜你喜欢

转载自blog.csdn.net/weixin_42132384/article/details/89138786