WPF MVVM: ItemTemplate для привязки списка ICommands к ListBox - PullRequest
5 голосов
/ 12 ноября 2010

В приложении MVVM я динамически хочу показать кнопки для функций, которые можно изменить во время выполнения. Технически это не так сложно, в моей ViewModel у меня есть наблюдаемая коллекция RelayCommands:

public ObservableCollection<RelayCommand> CustomCommands {get;set;}

Теперь в Xaml я могу привязать ListBox к этой коллекции:

<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 фокусируется на пользователях, и я могу выбирать кнопки с помощью клавиш со стрелками вместо вкладки.

Мне нужна возможность ListBox для привязки к коллекции, но мне не нужны никакие другие функции списка.
Есть ли какая-то другая панель вместо ListBox, которую я могу использовать?
Или я могу как-то отключить функции ListBox, чтобы он просто отображал содержащиеся элементы, не имея возможности выбрать их в ListBox?

1 Ответ

5 голосов
/ 12 ноября 2010

Попробуйте использовать базовый ItemsControl вместо ListBox, если вам не нужны какие-либо функции 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...