将工作绑定连接到列表<;字符串>;
本文关键字: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>