如何将字符串的observableCollection绑定到listBox?

3
我有一个observableCollection实例,我想将其绑定到列表上,并让用户直接更改此集合中的字符串。
当前的实现如下:
class container
{
    public OBservableCollection<string> data {get; set;}
    public container() { data = new ... }
}
...
var instance = new container();
listBox.ItemsSource = instance.data;

对于XAML:

<ListBox>
 <ListBox.ItemTemplate>
  <DataTemplate>
   <StackPanel Orientation="Horizontal">
    <TextBox Text="{Binding}" MinWidth="50"/>
   </StackPanel>
  </DataTemplate>
 </ListBox.ItemTemplate>
</ListBox>

当我将任何字符串添加到该列表中时,会出现错误“双向绑定需要路径或XPath”。我尝试将路径值设置为“.”,因为我针对的是相同的源值,但是绑定失败了。
请给予建议。

我知道你已经尝试过了,但你是否执行过这个——路径=。 - Muds
3
你需要创建一个数据项类来公开字符串属性。绑定可以更改其源属性,但无法替换集合中的字符串。 - Clemens
@Clemens,谢谢你,但我认为如果我们可以直接访问该值,那么从设计的角度来看会更好。 - Abdallah Nasir
我之前尝试过了,不需要示例,谢谢。但我正在寻找一种直接访问值的方法,我认为绑定支持这个功能,https://msdn.microsoft.com/en-us/library/system.windows.data.binding.path.aspx - Abdallah Nasir
字符串是不可变的,我认为没有简单的方法可以做到你想做的事情。 - Muds
显示剩余3条评论
1个回答

7

WPF绑定无法替换集合中的元素。

您需要创建一个数据项类,其中包含一个字符串属性。

class Item
{
    public string Text { get; set; }
}

class Container
{
    public ObservableCollection<Item> Data { get; set; }
}

可以进行双向绑定的:

<ListBox>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBox Text="{Binding Text}" MinWidth="50"/>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接