繁体   English   中英

复选框ListView WPF C#

[英]Checkbox ListView WPF C#

我将开始为WPF进行开发,我对此表示怀疑。

我创建了一个ListView,其具有对下一个ExtComandaDTO对象的Binding属性。 “ seleciona”中的属性与复选框有关系,但是我有以下问题。 当我单击复选框时,它将调用正常事件,但是当我在运行时更改“ seleciona”的值时,我的列表视图中的复选框被选中,但不调用事件检查。

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"); }
    }
}

UI(未设置)触发的事件为Checked和Unchecked。

如果要捕获代码中的更改,请处理集中的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM