【发布时间】:2018-05-03 15:03:50
【问题描述】:
我有一些 XAML 代码让我很生气。首先是为未引用的值添加一个虚拟项目。
为此,我必须实现 CollectionViewSource 和 CompositeCollection。
现在我无法选择第一个 Combobox 项,它出现但我无法选择它,因为我在 XAML 中设置了DisplayMemberPath(我猜是这样)。分隔符看起来也不像预期的那样。
让我告诉你:
如果我不设置 XAML DisplayMemberPath,我可以使用 Dummy Item 但绑定的项目显示不正确:
XAML:
<ComboBox x:Name="G_cb_content_zuordnung"
Margin="165,0,0,0"
Grid.Row="1"
SelectedIndex="0"
VerticalAlignment="Top"
DisplayMemberPath="PartnerID"
HorizontalAlignment="Left"
Width="119">
<ComboBox.Resources>
<CollectionViewSource x:Key="ComboCollection" Source="{Binding Path=mySelectedItem.Stammkinder}" />
</ComboBox.Resources>
<ComboBox.ItemsSource>
<CompositeCollection>
<ComboBoxItem Content="Ohne Stammnummer" Name="NoPID" />
<Separator />
<CollectionContainer Collection="{Binding Source={StaticResource ComboCollection}, Mode=OneWay}" />
</CompositeCollection>
</ComboBox.ItemsSource>
</ComboBox>
我只需要一个显示在ObservableCollection<myClass> 顶部的虚拟/占位符组合框项目。难道我的思维方式不对?有更聪明的解决方案吗?我的解决方案是否遗漏了什么?
【问题讨论】:
-
我不确定“虚拟项目”的用途是什么,但看起来您正试图让组合框以不同于设计的方式运行。这通常非常困难。一般来说,创建 UI 通常很困难。我建议您在代码隐藏中创建一个带有逻辑的 UserControl 来管理虚拟项目(UI 逻辑在代码隐藏中,不要认为这不是 mvvm),完全放弃这个概念,或者在那里找到一个不同的组合控件以你想要的方式行事。
-
它在后台与我的 Viewmodel 链接,如果我选择一个值,则应修改或覆盖现有值。如果选择了虚拟字段,它应该会导致在我的 Viewmodel 中创建一个新对象。最后,它是一个简单的“切换”——并不少见。
标签: c# wpf mvvm data-binding compositecollection