【问题标题】:Automatically select an item from populated combobox with binding? Silverlight使用绑定自动从填充的组合框中选择一个项目?银光
【发布时间】:2011-10-12 04:12:10
【问题描述】:

假设我有以下两个控件。

<ListBox ItemsSource="{Binding Path=Events}"
         DisplayMemberPath="Name"
         SelectedItem="{Binding SelectedEvent, Mode=TwoWay}"
         Grid.Column="0" Grid.RowSpan="4" Margin="5"/>

<ComboBox x:Name="VenueBox"
          ItemsSource="{Binding Path=VenueNames}"
          SelectedItem="{Binding Path=SelectedVenueName, Mode=TwoWay}"
          Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2"
          Margin="10"/>

ListBox 绑定到一个“持有”自定义类的 ObservableCollection。 ComboBox 绑定到字符串的 ObservableCollection。现在自定义类有一个字符串属性,其值来自组合框。我想要的是如果我在 ListBox 中选择一个项目,然后自动从 ComboBox 中选择该值。是否有可能使用纯 XAML 或代码中的某些操作是必须的?希望我的解释清楚,谢谢您的帮助。

【问题讨论】:

  • 你在使用 MVVM 吗?这是一个很好的示例,其中视图模型可以为您完成所有这些逻辑。

标签: wpf silverlight data-binding select combobox


【解决方案1】:

我将在这里阅读字里行间。您有一个代表某个事件的“事件”类。事件发生在某个日期和时间以及我们称为“地点”的位置,“事件”类有一个字符串属性,它是地点的名称。

您还有可能的场地名称列表。

您要绑定的对象具有“事件”类型的SelectedEvent 属性和string 类型的SelectedVenue 属性。您希望应用的规则是,当在列表框中选择事件时,SelectedVenue 只能是事件指定的地点。

所以真正的问题是:这条规则的执行属于哪里?

这并不是真正应用视图的工作。您绑定的模型应该知道此规则。 SelectedEvent 属性设置器中的代码应确保应用正确的 SelectedVenue 值。

然后视图将简单地反映模型的当前状态,但模型有责任了解哪些“正确”状态不是视图的状态。

【讨论】:

  • 谢谢你,Anthony,我做到了,同时你写的东西也很有效。
【解决方案2】:

如果你能负担得起以不同方式绑定 ComboBox 的 SelectedItem(无论如何,拥有一个专用属性似乎是多余的,因为你已经拥有 SelectedEvent 应该这样做:

SelectedItem="{Binding Path=SelectedEvent.Venue, Mode=TwoWay}"

(我不知道场地属性的实际名称,因此可能需要根据您的模型进行调整)

【讨论】:

  • @rescueme:很高兴有帮助 :)
  • 谢谢你,如果我不需要那个“额外”属性,你给了我一个很好的解决方案。我希望我能接受你和安东尼的回答。
猜你喜欢
  • 2012-02-29
  • 2020-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-29
  • 1970-01-01
  • 2020-04-27
  • 2018-02-10
相关资源
最近更新 更多