【问题标题】:In WPF, is it possible to bind values to controls in a loop?在 WPF 中,是否可以将值绑定到循环中的控件?
【发布时间】:2011-10-07 09:55:39
【问题描述】:

我有一系列 TextBlock 控件,如下所示:

<TextBox Name="tb1"/>
<TextBox Name="tb2"/>
<TextBox Name="tb3"/>
<TextBox Name="tb4"/>

我有一个值列表,我想绑定到这些文本框,比如在一个列表中:

List<String> texts = new List<String>();
texts.Add("test1");
texts.Add("test2");
texts.Add("test3");
texts.Add("test4");

目前,我要做的是手动设置文本框的值,如下所示:

tb1.Text = texts[0];
tb2.Text = texts[1];
tb3.Text = texts[2];
tb4.Text = texts[3];

是否有可能以某种方式循环执行此操作?也许更改 XAML 以获取列表或以编程方式获取文本框?提前非常感谢。

【问题讨论】:

    标签: wpf xaml


    【解决方案1】:

    您可以在绑定中访问索引值 - 无需循环。从Ivan Towlson 检查这个previous SO answer。 Ivan 在该示例中使用了字符串索引器,但您也可以使用数字索引器。

    【讨论】:

      【解决方案2】:
      <ItemsControl Items="{Binding myValues}">
          <ItemsControl.ItemTemplate>
              <DataTemplate>
                  <TextBox Text="{Binding}"></TextBox>
              </DataTemplate>
          </ItemsControl.ItemTemplate>
      </ItemsControl>
      

      在你的代码后面声明一个属性:

      public string myValues { get return new[] { "foo", "bar" }; }
      

      并在构造函数后面的代码中将此控件设置为其数据上下文:

      this.DataContext = this;
      

      【讨论】:

      • 嗯,给我“例外:双向绑定需要 Path 或 XPath。”
      猜你喜欢
      • 2015-03-17
      • 1970-01-01
      • 1970-01-01
      • 2010-10-24
      • 2012-09-01
      • 2021-03-10
      • 2011-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多