将工作绑定连接到列表<;字符串>;

本文关键字:lt 字符串 gt 列表 工作 绑定 连接 | 更新日期: 2023-09-27 17:58:08

我正在绑定到对象CaptureNamesList的属性。我需要绑定到的变量是一个List<string>

当我直接绑定到List<string>时,它不起作用。我为字符串创建了一个包装类StringWrapper,当我使用List<StringWrapper>_test4作为支持变量时,它就可以工作了。然而,我需要以某种方式将其链接回_test1。我的尝试被评论掉了,但似乎不起作用。

如何绑定到此List<string>

xaml:

<ItemsControl ItemsSource="{Binding CaptureNamesList}">
     <ItemsControl.ItemTemplate>
          <DataTemplate>
              <TextBox Text="{Binding Path=Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
          </DataTemplate>
     </ItemsControl.ItemTemplate>
</ItemsControl>

c#:

public List<StringWrapper> CaptureNamesList
    {
        get { return _test4; }
        set { _test4 = value; }
        //get { return StringWrapper.castList(_test1); }
        //set { _test1 = StringWrapper.castBackList(value); }
    }
private List<StringWrapper> _test4 = StringWrapper.castList(new List<string> { "one", "two" });
private List<string> _test1 = new List<string> { "one", "two" };

字符串的包装类:

public class StringWrapper
{
    public string Value { get; set; }
    static public explicit operator StringWrapper(string value)
    {
        return new StringWrapper() {Value=value};
    }
    static public explicit operator string(StringWrapper value)
    {
        return value.Value;
    }
    public static List<StringWrapper> castList(List<string> strings)
    {
        List<StringWrapper> wrappers = new List<StringWrapper>();
        strings.ForEach(item => wrappers.Add((StringWrapper)item));
        return wrappers;
    }
    public static List<string> castBackList(List<StringWrapper> wrappers)
    {
        List<string> strings = new List<string>();
        strings.ForEach(item => strings.Add((string)item));
        return strings;
    }
}

将工作绑定连接到列表<;字符串>;

绑定到List<string>应该完全相同,只是在DataTemplate中不必为绑定指定任何属性:

<ItemsControl ItemsSource="{Binding CaptureNamesList}">
     <ItemsControl.ItemTemplate>
          <DataTemplate>
              <TextBox Text="{Binding Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
          </DataTemplate>
     </ItemsControl.ItemTemplate>
</ItemsControl>

如果要将集合绑定到XAML,我建议您使用ObservableCollection<string>

public ObservableCollection<string> CaptureNamesList { get; set; }

我不知道你为什么要将列表绑定到TextBox,也许你需要的是一个TextBlock或ListView来显示集合中的项目。

<ItemsControl ItemsSource="{Binding CaptureNamesList}">
 <ItemsControl.ItemTemplate>
      <DataTemplate>
          <TextBox Text="{Binding Mode=TwoWay}"/>
      </DataTemplate>
 </ItemsControl.ItemTemplate>