WPF MVVM: ItemTemplate для привязки списка ICommands к ListBox

В приложении 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>

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

В приложении 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>

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

В приложении 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>

На первый взгляд это выглядит так, как будто он работает.

В приложении 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>

На первый взгляд это выглядит так, как будто он работает.

В приложении 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?

5
задан Sam 12 November 2010 в 12:13
поделиться