复选框ListView WPF C#

复选框ListView WPF C#,c#,wpf,C#,Wpf,我将开始为WPF开发,我有一个疑问 我创建了一个ListView,它将属性绑定到对象的下一个ExtComAnd。“seleciona”中的属性与复选框有关系,但我有以下问题。 当我单击复选框时,它调用正常事件,但当我在运行时更改“seleciona”的值时,我的listview中的复选框被选中,但不调用事件检查 Listview中缺少可称为事件的某些属性 <ListView x:Name="LvwComanda" Grid.Column="0" Bac

我将开始为WPF开发,我有一个疑问

我创建了一个ListView,它将属性绑定到对象的下一个ExtComAnd。“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"); }
    }
}

#区域事件列表行Comanda
已检查私有无效\u LvwComandaRow(对象发送方,路由目标e)
{
this.Handle_LvwComandaRow((复选框)sender,true);
}
未选中私有无效\u LvwComandaRow(对象发送方,路由目标)
{
this.Handle_LvwComandaRow((复选框)sender,false);
}
私有无效句柄\u LvwComandaRow(复选框发件人,布尔检查)
{
if(sender.DataContext是ExtComandaDTO)
{   
var row=(ExtComandaDTO)sender.DataContext;
如果(检查)
{
obextcomanda.FindAll(c=>c.seleciona&&c.id_-mesa!=row.id_-mesa).ForEach(c=>c.seleciona=false);
}
bool bolComandaSelected=obextcomanda.Exists(c=>c.selecona);
BtPagamento.IsEnabled=已选择的Bolcomanda;
BtImprimir.IsEnabled=BolcomandSelected;
此.PrepareObsPedido(检查,行);
本文件。准备BSCOMANDAPAGTO(支票,世界其他地区);
}
}
公共类ExtComAndAto:ComAndAto,InotifyProperty已更改
{
公共事件属性更改事件处理程序属性更改;
私有void OnPropertyChanged(字符串属性)
{
if(PropertyChanged!=null)
{
PropertyChanged(此,新PropertyChangedEventArgs(property));
}
}
私有布尔选择;
私有布尔值_finalizapendente;
公共布尔选择
{
获取{return\u seleciona;}
设置{u seleciona=value;OnPropertyChanged(“seleciona”);}
}
公共新布尔定稿a_pendente
{
获取{return}
设置{finalizapendente=value;OnPropertyChanged(“finalizapendente”);}
}
}

选中和未选中是UI(不是集合)触发的事件

如果您希望捕获代码中的更改,请在集合中处理这些内容