【问题标题】:Cast list of object into list of class [duplicate]将对象列表转换为类列表[重复]
【发布时间】:2013-12-23 04:09:05
【问题描述】:

我有来自名为 A 的班级的 ObservableCollection。(ObservableCollection<A>). 这个集合(我们称之为listA)绑定到ListBox(我们称之为itemsList)。 这个ListBox 有SelectionMode=Extended,所以我希望能够选择多个项目。 我正在尝试获取该itemsList 的选定项目。问题是 SelectedItems 返回对象列表,我不知道如何将其从 A 类“转换”为 ObservableCollection。 例如,如果我有一个TextBox 绑定到 A 类中的字符串,我需要将它放在 xml 中。 示例:

<TextBox Text={Binding ElementName=itemsList, Path=SelectedItems.stringA}"/>

当然,我有 DataContextTextBox

【问题讨论】:

  • 那么您想在文本框中显示 ClassA 的哪个实例属性?
  • 我有一个名为 stringA 的字符串,带有 get 和 set 方法,如果这就是你的意思。对不起,我是初学者
  • 不,我的意思是假设您在列表框中选择了两个项目。那么这两个 selectedItem 中,哪个 item 的 stringA 属性文本需要在文本框中显示?
  • 我希望stringA的值和第一个SelectedItem一样。
  • @O.R.Mapper 我不确定我是否真的了解整个解决方法。

标签: c# wpf binding casting observablecollection


【解决方案1】:

只需使用此绑定:

<TextBox 
    x:Name="MyTextBox"
    TextChanged="TextBoxBase_OnTextChanged"
    Text="{Binding Path=SelectedItems[0].Content, 
    ElementName=MyListBox,
    NotifyOnSourceUpdated=True, 
    UpdateSourceTrigger=PropertyChanged,
    Mode=TwoWay}">
</TextBox>

您将需要 TextBoxBase_OnTextChanged 事件处理程序,如下所示:

private void TextBoxBase_OnTextChanged(object sender, TextChangedEventArgs e)
{
    MyListBox.SelectedItems.Cast<A>().ToList().ForEach(x => x.Content = MyTextBox.Text);
}

【讨论】:

  • 这正是我想要的!谢谢!
【解决方案2】:

如果您想从第一个选定的项目中显示StringA,您可以尝试绑定到集合中的索引。像这样的:

<TextBox Text={Binding ElementName=itemsList, Path=SelectedItems[0].stringA}"/>

【讨论】:

  • 试过了。它可以与单个选择一起使用,但是在选择多个项目并编辑文本框时,只有第一个项目更改,而我也希望所有其他SelectedItems.Stringa与第一个SelectedItem.stringa 相同。
  • 那是一个不同且更复杂的故事。我认为您无法通过一些简单的绑定来解决这个问题。您将需要更多逻辑,也许是另一个知道文本框中的值以及选择了哪些项目的对象。如果你有,那么你可以更新所有选定项目的属性。
猜你喜欢
  • 1970-01-01
  • 2017-12-01
  • 1970-01-01
  • 2017-10-26
  • 2013-12-02
  • 1970-01-01
  • 2017-09-02
  • 1970-01-01
  • 2021-10-14
相关资源
最近更新 更多