【问题标题】:How do I Bind observableCollection of strings to a listBox如何将字符串的 observableCollection 绑定到列表框
【发布时间】:2015-06-14 21:59:48
【问题描述】:

我有一个 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>

当我将任何字符串添加到该列表时,会出现一个错误,“双向绑定需要 Path 或 XPath。”。我尝试将路径值设置为“。”因为我的目标是相同的源值,但是绑定失败了。

请指教,

【问题讨论】:

  • 我知道您已经尝试过,但您是否这样做过 -- path=.
  • @Muds 你的意思是:Text="{Binding path=.}",当然我做到了,我在问题中这么说
  • 您必须创建一个将字符串作为属性公开的数据项类。 Binding 可以更改其源属性,但不能替换集合中的字符串。
  • @Clemens,谢谢,但我认为如果我们可以直接访问该值,那么作为设计问题会更好。
  • 是的,Clemens 是对的,你需要在你的字符串周围有一个包装类......如果你需要样本,请告诉我

标签: c# wpf


【解决方案1】:

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>

【讨论】:

    猜你喜欢
    • 2018-08-13
    • 2011-05-07
    • 2018-01-28
    • 2014-08-02
    • 2012-05-25
    • 1970-01-01
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多