2014-09-03 163 views
0

我將開始爲WPF開發,我有疑問。複選框列表視圖WPF C#

我用Binding屬性創建了一個ListView到下一個ExtComandaDTO對象。 「seleciona」中的屬性與複選框有關係,但我有以下問題。 當我點擊複選框時,它會調用正常事件,但是當我在運行時更改「seleciona」的值時,我的listview中的複選框被選中,但不會調用事件檢查。

從Listview中缺少被稱爲事件的某些屬性?

<ListView x:Name="LvwComanda" Grid.Column="0" 
       Background="{x:Null}" 
       Margin="40,36,40,40" 
       SelectedItem="{Binding SelectedExtComanda}" 
       ItemsSource="{Binding ObsExtComanda, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
       Grid.RowSpan="2" > 
     <ListView.ContextMenu> 
      <ContextMenu> 
       <MenuItem Header="Finaliza Comanda" Checked="LvwComandaRowFinalizaComanda_Click" Unchecked="LvwComandaRowFinalizaComanda_Click"></MenuItem> 
      </ContextMenu> 
     </ListView.ContextMenu> 
     <ListView.Resources> 
      <Style TargetType="{x:Type ListViewItem}"> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding finaliza_pendente}" Value="true"> 
         <Setter Property="Foreground" Value="Red" /> 
        </DataTrigger> 
        <DataTrigger Binding="{Binding finalizada}" Value="true"> 
         <Setter Property="Foreground" Value="DarkViolet" /> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </ListView.Resources> 
     <ListView.View> 
      <GridView > 
       <GridViewColumn Width="30"> 
        <GridViewColumn.CellTemplate> 
         <DataTemplate > 
          <CheckBox Name="ChkComanda" IsChecked="{Binding seleciona.IsChecked, Mode=TwoWay}" Checked="Checked_LvwComandaRow" Unchecked="Unchecked_LvwComandaRow" /> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 
       <GridViewColumn Width="Auto" Header="Comanda"  DisplayMemberBinding="{Binding nr_comanda}"/> 
       <GridViewColumn Width="Auto" Header="Taxa Servico" DisplayMemberBinding="{Binding taxa_servico}" /> 
       <GridViewColumn Width="Auto" Header="Finalizada" DisplayMemberBinding="{Binding finalizada, Converter={StaticResource ReplaceConvertSimNao}}" /> 
       <GridViewColumn Width="Auto" Header="Observacao" DisplayMemberBinding="{Binding observacao}"/> 
      </GridView> 
     </ListView.View> 
     <ListView.GroupStyle> 
      <GroupStyle> 
       <GroupStyle.ContainerStyle> 
        <Style TargetType="{x:Type GroupItem}"> 
         <Setter Property="Margin" Value="0,0,0,0"/> 
         <Setter Property="Template"> 
          <Setter.Value> 
           <ControlTemplate TargetType="{x:Type GroupItem}"> 
            <Expander IsExpanded="True" BorderBrush="#FFA4B97F" BorderThickness="0,0,0,1"> 
             <Expander.Header> 
              <DockPanel> 
               <DockPanel.ContextMenu> 
                <ContextMenu Loaded="LvwComandaHeaderContextMenu_Loaded"> 
                 <MenuItem Header="Libera Mesa" Checked="LvwComandaHeaderLiberaMesa_Click" Unchecked="LvwComandaHeaderLiberaMesa_Click" /> 
                </ContextMenu> 
               </DockPanel.ContextMenu> 
               <CheckBox x:Name="HeaderCheckBox" Checked="Checked_LvwComandaHeader" Unchecked="Unchecked_LvwComandaHeader"> 
                <StackPanel Orientation="Horizontal"> 
                 <TextBlock FontWeight="Bold" Text="{Binding Name, Converter={StaticResource ReplaceConvertMesaId}}" Margin="5,0,0,0"/> 
                 <TextBlock Width="Auto" Text=" " /> 
                 <TextBlock FontWeight="Bold" Width="Auto" Text="{Binding Name, Converter={StaticResource ReplaceConvertMesaGrupo}}" /> 
                 <TextBlock Text=" ("/> 
                 <TextBlock Text="{Binding ItemCount, Converter={StaticResource ReplaceConvertComanda}}"/> 
                 <TextBlock Text=")"/> 
                </StackPanel> 
               </CheckBox> 
              </DockPanel> 
             </Expander.Header> 
             <ItemsPresenter /> 
            </Expander> 
           </ControlTemplate> 
          </Setter.Value> 
         </Setter> 
        </Style> 
       </GroupStyle.ContainerStyle> 
      </GroupStyle> 
     </ListView.GroupStyle> 
    </ListView> 

    #region Event List Row Comanda 

    private void Checked_LvwComandaRow(object sender, RoutedEventArgs e) 
    { 
     this.Handle_LvwComandaRow((CheckBox)sender, true); 
    } 

    private void Unchecked_LvwComandaRow(object sender, RoutedEventArgs e) 
    { 
     this.Handle_LvwComandaRow((CheckBox)sender, false); 
    } 

    private void Handle_LvwComandaRow(CheckBox sender, bool check) 
    { 
     if (sender.DataContext is ExtComandaDTO) 
     { 
      var row = (ExtComandaDTO)sender.DataContext; 

      if (check) 
      { 
       ObsExtComanda.FindAll(c => c.seleciona && c.id_mesa != row.id_mesa).ForEach(c => c.seleciona = false); 
      } 

      bool bolComandaSelected = ObsExtComanda.Exists(c => c.seleciona); 

      BtPagamento.IsEnabled = bolComandaSelected; 
      BtImprimir.IsEnabled = bolComandaSelected; 

      this.PrepareObsPedido(check, row); 

      this.PrepareObsComandaPagto(check, row); 
     } 
    } 



public class ExtComandaDTO : ComandaDTO, INotifyPropertyChanged 
{ 

    public event PropertyChangedEventHandler PropertyChanged; 

    private void OnPropertyChanged(String property) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(property)); 
     } 
    } 

    private Boolean _seleciona; 
    private Boolean _finaliza_pendente; 

    public Boolean seleciona 
    { 
     get { return _seleciona; } 
     set { _seleciona = value; OnPropertyChanged("seleciona"); } 
    } 

    public new Boolean finaliza_pendente 
    { 
     get { return _finaliza_pendente; } 
     set { _finaliza_pendente = value; OnPropertyChanged("finaliza_pendente"); } 
    } 
} 

回答

2

選中和取消選中是UI觸發的事件(不是集合)。

如果要捕獲代碼中的更改,請處理該集合中的內容。