复选框ListView WPF C#
我将开始为WPF开发,我有一个疑问 我创建了一个ListView,它将属性绑定到对象的下一个ExtComAnd。“seleciona”中的属性与复选框有关系,但我有以下问题。 当我单击复选框时,它调用正常事件,但当我在运行时更改“seleciona”的值时,我的listview中的复选框被选中,但不调用事件检查 Listview中缺少可称为事件的某些属性复选框ListView WPF C#,c#,wpf,C#,Wpf,我将开始为WPF开发,我有一个疑问 我创建了一个ListView,它将属性绑定到对象的下一个ExtComAnd。“seleciona”中的属性与复选框有关系,但我有以下问题。 当我单击复选框时,它调用正常事件,但当我在运行时更改“seleciona”的值时,我的listview中的复选框被选中,但不调用事件检查 Listview中缺少可称为事件的某些属性 <ListView x:Name="LvwComanda" Grid.Column="0" Bac
<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(不是集合)触发的事件
如果您希望捕获代码中的更改,请在集合中处理这些内容