【发布时间】:2022-01-08 17:54:52
【问题描述】:
我试图理解为什么会这样:
<ComboBox Name="cboServer" HorizontalAlignment="Left" ItemsSource="{Binding Server.Connections}" DisplayMemberPath="ConnectionName" Margin="91,43,0,0" VerticalAlignment="Top" Width="279"/>
但这不是:
<ComboBox Name="cboServer" HorizontalAlignment="Left" ItemsSource="{Binding Server}" DisplayMemberPath="Connections.ConnectionName" Margin="91,43,0,0" VerticalAlignment="Top" Width="279"/>
这样做的原因是因为我想将ComboBox 的SelectedValue 属性绑定回我的模型,但我不能,除非我可以访问整个Server。
【问题讨论】:
-
使用 SelectedItem。当项目源绑定到服务器时,该对象是具有许多连接的服务器对象,并且它不知道要显示/显示哪个名称。绑定到连接然后有一个属性 ConnectionName 也可以工作
-
谢谢 - 我不应该指定“Connections.ConnectionName”,因此它会知道显示哪个?但没有。
-
不!假设您有服务器对象,并且该服务器有 3 个连接,现在应该显示哪个名称?
-
好吧,这开始有意义了,但是 ItemsSource="{Binding Server.Connections}" 有什么不同呢?这按预期工作。
-
你的 DataContext 有一个 Server 属性,这个服务器有一个 Connections 的集合。所以这就是你可以绑定到 Server.Connections 的原因。意味着 ComboBox 中的每个项目都将是一个 Connection 对象。另一方面,如果您绑定到服务器,则 ComboBox 中只有一个服务器对象,并且 DisplayMemberPath 无法将 Connection.ConnectionName 转换为服务器对象中的任何属性。
标签: c# wpf xaml data-binding