在MVVM应用程序中,我动态地希望显示可在运行时更改的功能按钮。从技术上讲,这并不是那么困难,在我的ViewModel中,我有一个可观察到的RelayCommands集合:
public ObservableCollection<RelayCommand> CustomCommands {get;set;}
现在,在Xaml中,我可以将ListBox绑定(bind)到此Collection:
<StackPanel Orientation="Horizontal">
<ListBox ItemsSource="{Binding CustomCommands}">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<wpfhlp:RelayButton DataContext="{Binding}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
乍一看,这似乎是可行的。
我的问题是:制表符顺序已损坏。我希望用户能够从一个按钮跳到另一个按钮,但是ListBox代替了按钮,而是吸引了用户的注意力,我可以使用箭头键而不是Tab键在按钮之间进行选择。
我需要具有绑定(bind)到集合的ListBox的功能,但不需要任何其他的listbox功能。
是否可以使用ListBox以外的其他面板?
还是我可以以某种方式禁用ListBox函数,使其仅显示所包含的项目而无法在ListBox中选择它们?
最佳答案
如果不需要任何ListBox功能,请尝试使用基本ItemsControl而不是ListBox:
<StackPanel Orientation="Horizontal">
<ItemsControl ItemsSource="{Binding CustomCommands}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<wpfhlp:RelayButton DataContext="{Binding}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
关于c# - WPF MVVM : ItemTemplate for binding a list of ICommands to a ListBox,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4164487/