2015-07-08 6 views
0

Почему HandleListBoxClickEvent работает только в пустом пространстве списка? Проблема в том, когда я хочу обновить список. При нажатии на какой-то элемент ничего не обновляется. Но нажатие на пустое пространство списка (когда выбран какой-либо элемент) - выбранный элемент обновляется.WPF HandleListBoxClickEvent работает только в пустом пространстве списка

Я думаю, что некоторая проблема должна быть в xaml, потому что я следил за готовым (рабочим) примером с кодом C#.

Ресурсы:

<UserControl.Resources> 
    <Style x:Key="RedGlowItemContainer" TargetType="{x:Type ListBoxItem}"> 
     <Setter Property="Control.Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type ListBoxItem}"> 
        <Border Name="IconBorder" Background="#00FFFFFF"> 
         <ContentPresenter /> 
        </Border> 
        <ControlTemplate.Triggers> 
         <Trigger Property="ListBoxItem.IsSelected" Value="True"> 
          <Setter TargetName="IconBorder" Property="Border.Background" Value="#FF07A3E9" /> 
          <Setter Property="Control.FontWeight" Value="Bold" /> 
          <Setter Property="Control.Foreground" Value="#FFFFFFFF" /> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
    <DataTemplate x:Key="CategoryTemplate" DataType="{x:Type vm:OrderEntryViewModel}"> 
     <vw:MenuItemSelectorView /> 
    </DataTemplate> 
    <mmc:OrderTemplateSelector x:Key="PanelTemplateSelector" /> 
</UserControl.Resources> 

ViewModel:

internal class OrderEntryViewModel : ViewModelBase, IParentViewModel, IViewModelBase 
{ 
... 
public void HandleListBoxClickEvent() 
    { 
     if (this._selectedOrder != null) 
     { 
      if (this._selectedOrder.IsNew) 
      { 
       if (this._qty != "") 
       { 
        this._selectedOrder.Quantity = int.Parse(this._qty); 
        this.SelectedQuantity = ""; 
        this.CalculateTotal(); 
       } 
      } 
     } 
} 
... 
} 

xaml.cs: список

public partial class OrderEntryView : System.Windows.Controls.UserControl 
{ 
    private bool isExpended = true; 

    public OrderEntryView() 
    { 
     this.InitializeComponent(); 
    } 

    private void LstTicket_MouseDown(object sender, MouseButtonEventArgs e) 
    { 
     ((OrderEntryViewModel)base.DataContext).HandleListBoxClickEvent(); 
    } 

    private void UserControl_Loaded(object sender, RoutedEventArgs e) 
    { 
    } 
} 

XAML:

<ListBox Name="LstTicket" IsSynchronizedWithCurrentItem="True" VerticalAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Hidden" ScrollViewer.VerticalScrollBarVisibility="Hidden" ItemContainerStyle="{StaticResource RedGlowItemContainer}" FontSize="12" ItemsSource="{Binding Orders, Mode=TwoWay}" SelectedItem="{Binding SelectedOrder, Mode=TwoWay}" Common:ListBoxExtenders.AutoScrollToEnd="True" MouseDown="LstTicket_MouseDown" Grid.Row="1"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <StackPanel HorizontalAlignment="Stretch" Background="#00FFFFFF"> 
         <Grid Background="#00FFFFFF" Width="230"> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="24" /> 
           <ColumnDefinition Width="*" /> 
           <ColumnDefinition Width="45" /> 
          </Grid.ColumnDefinitions> 
          <Grid.RowDefinitions> 
           <RowDefinition Height="25" /> 
          </Grid.RowDefinitions> 
          <TextBlock Style="{DynamicResource StyleStrikethrough}" Grid.Column="0" Width="24" Padding="0" HorizontalAlignment="Left" Text="{Binding Quantity, StringFormat=0}" /> 
          <TextBlock Style="{DynamicResource StyleStrikethrough}" Grid.Column="1" HorizontalAlignment="Left" Padding="0" Text="{Binding DisplayName}" /> 
          <TextBlock Style="{DynamicResource StyleStrikethrough}" Grid.Column="2" Padding="0" HorizontalAlignment="Right" Text="{Binding TotalPrice, StringFormat=N2}" /> 
         </Grid> 
         <ItemsControl ItemsSource="{Binding OrderModifiers}"> 
          <ItemsControl.ItemTemplate> 
           <DataTemplate> 
            <Grid Background="#00FFFFFF"> 
             <Label Padding="0" Foreground="#FF0000FF" Margin="30,0,0,0" HorizontalAlignment="Left" Content="{Binding DisplayName}" /> 
             <Label Padding="0" Foreground="#FF0000FF" Margin="0,0,20,0" HorizontalAlignment="Right" Content="{Binding Price, StringFormat=N2}" /> 
            </Grid> 
           </DataTemplate> 
          </ItemsControl.ItemTemplate> 
         </ItemsControl> 
         <ItemsControl ItemsSource="{Binding OrderSetItems}"> 
          <ItemsControl.ItemTemplate> 
           <DataTemplate> 
            <StackPanel> 
             <Grid Background="#00FFFFFF" Width="230"> 
              <Grid.ColumnDefinitions> 
               <ColumnDefinition Width="24" /> 
               <ColumnDefinition Width="*" /> 
               <ColumnDefinition Width="45" /> 
              </Grid.ColumnDefinitions> 
              <Grid.RowDefinitions> 
               <RowDefinition Height="15" /> 
              </Grid.RowDefinitions> 
              <TextBlock Style="{DynamicResource StyleStrikethrough}" Margin="10,0,0,0" Grid.Column="0" Width="24" Padding="0" HorizontalAlignment="Left" Text="{Binding Quantity, StringFormat=0}" /> 
              <TextBlock Style="{DynamicResource StyleStrikethrough}" Grid.Column="1" HorizontalAlignment="Left" Padding="0" Text="{Binding DisplayName}" /> 
              <TextBlock Style="{DynamicResource StyleStrikethrough}" Grid.Column="2" Padding="0" HorizontalAlignment="Right" Text="{Binding TotalPrice, StringFormat=N2}" /> 
             </Grid> 
             <ItemsControl ItemsSource="{Binding OrderSetModifiers}"> 
              <ItemsControl.ItemTemplate> 
               <DataTemplate> 
                <Grid Background="#00FFFFFF"> 
                 <Label Padding="0" Foreground="#FF0000FF" Margin="30,0,0,0" HorizontalAlignment="Left" Content="{Binding DisplayName}" /> 
                 <Label Padding="0" Foreground="#FF0000FF" Margin="0,0,20,0" HorizontalAlignment="Right" Content="{Binding Price}" /> 
                </Grid> 
               </DataTemplate> 
              </ItemsControl.ItemTemplate> 
             </ItemsControl> 
            </StackPanel> 
           </DataTemplate> 
          </ItemsControl.ItemTemplate> 
         </ItemsControl> 
        </StackPanel> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 
+0

где находится этот стиль «RedGlowItemContainer». –

+0

У меня есть он в том же файле xaml. Я редактировал вопрос – tauri

ответ

1

Без a good, minimal, complete code example, что наглядно иллюстрирует вопрос, нецелесообразно пытаться представить пример рабочего кода.

Но я могу рассказать вам, что является основной проблемой: когда пользователь нажимает на фактический элемент в вашем ListBox, сам элемент обрабатывает ввод пользователя.

Вы можете либо просмотреть событие мыши (см., Например, Mouse.PreviewMouseDown Attached Event, уделяя пристальное внимание документированным оговоркам), либо вы можете обработать событие MouseDown в самом элементе списка. См. How can I get an event or command to fire when the user clicks on a ListViewItem? для получения дополнительной информации.

+0

Спасибо. Я посмотрю ссылки, которые вы мне прислали. – tauri

 Смежные вопросы

  • Нет связанных вопросов^_^