【发布时间】:2016-01-20 03:29:03
【问题描述】:
我的项目中有以下情况,我想知道实现目标的最佳方法是什么。
目标:拥有一个带有 itemsource 绑定的组合框和一个功能类似于刷新按钮的条目(从数据库中获取项目并更新组合框项目)。
目前我使用 itemsource 绑定设置我的组合框(见下文),但目前我正在为刷新命令的绑定而苦苦挣扎。
ItemsSource 绑定:
<UserControl.Resources>
<CollectionViewSource x:Key="ProjectSource" Source="{Binding Projects, ElementName=Ancestor}"/>
<CompositeCollection x:Key="ProjectCollection">
<CollectionContainer Collection="{Binding Source={StaticResource ProjectSource}}"/>
<Button Content="Refresh!"/>
</CompositeCollection>
</UserControl.Resources>
其中 Projects 是具有项枚举的依赖属性,另一个具有刷新命令(ICommand)的依赖属性也是可用的。
我的 ComboBox 定义如下:
<ComboBox SelectedValue="{Binding Project}"
ItemsSource="{StaticResource ProjectCollection}"
VerticalContentAlignment="Center"
HorizontalAlignment="Left"
Name="Box"
IsHitTestVisible="{Binding IsEditable}"
IsEnabled="{Binding IsEnabled, Mode=OneWay, IsAsync=True}">
<ComboBox.Resources>
<DataTemplate DataType="{x:Type viewModels:ProjectViewModel}">
<TextBlock Text="{Binding Name}"/>
</DataTemplate>>
</ComboBox.Resources>
</ComboBox>
问题是命令找不到绑定的来源,所以问题是我是在正确的方式上做它并且有解决方案,还是我在错误的方式上(哪个更好? )。
当然我可以在我的组合框旁边添加一个按钮,但我想把它放在我的组合框中。 :)
顺便说一句:我正在尝试遵循 MVVM 模式。
【问题讨论】:
-
请记住,上面的示例中没有命令绑定,因为它不起作用。 :)
-
我对可用性很好奇。这是否意味着刷新项始终位于索引 0 中?如果没有,如果您有大量项目,您的用户将需要在组合列表中找到它。
-
@tgpdyk 关于我的可用性,这很好,因为只有当某个项目不在列表中时才需要刷新,这种情况大约每年 5 次。