Вопрос о CheckBox в датагрид - PullRequest
       14

Вопрос о CheckBox в датагрид

0 голосов
/ 01 августа 2011

Повторяется каждые MessageBox.Show(this.myProduct.Radif.ToString()); !!!!

Что происходит?

xaml код:

 <dg:DataGrid.Columns>
            <dg:DataGridTextColumn Binding="{Binding IdBook}" Header="IdBook" ></dg:DataGridTextColumn>
            <dg:DataGridTextColumn Binding="{Binding NameBook}" Header="NameBook"></dg:DataGridTextColumn>
            <dg:DataGridTextColumn Binding="{Binding Author}" Header="Author"></dg:DataGridTextColumn>
            <dg:DataGridTextColumn Binding="{Binding Price}" Header="Price"></dg:DataGridTextColumn>
            <dg:DataGridTextColumn Binding="{Binding DateRegister}" Header="DateRegister"></dg:DataGridTextColumn>
            <dg:DataGridTextColumn Binding="{Binding Description}" Header=Description" Width="*"></dg:DataGridTextColumn>
            <dg:DataGridTemplateColumn>
                <dg:DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <CheckBox IsChecked="{Binding Selecting, UpdateSourceTrigger=PropertyChanged}" Checked="Checked" Unchecked="UnChecked" />
                    </DataTemplate>
                </dg:DataGridTemplateColumn.CellTemplate>
            </dg:DataGridTemplateColumn>

мой код:

    private List<Book> MyProd = new List<Book>();
    private Book myProduct = null;

    private void Checked(object sender, RoutedEventArgs e)
    {
        this.myProduct = new Book();
        this.myProduct = (Book)dataGrid.CurrentItem;
        MessageBox.Show(this.myProduct.No.ToString());
    }

class Book
{
    public int No{ get; set; }
    public string NameBook { get; set; }
    public string Author { get; set; }
    public string Description { get; set; }
    public string DateRegister { get; set; }
    public Int64 Price { get; set; }
    public bool Selecting { get; set; }
}

1 Ответ

0 голосов
/ 01 августа 2011

События Checkbox / Unchecked на самом деле являются примитивными типами ToggleButton.Checked / Unchecked, и их использование не поощряется сообществом разработчиков.

Вместо этого вы можете обрабатывать событие CheckBox.Click и внутри этого обработчика ....

 if (((CheckBox)sender).IsChecked.GetValueOrDefault(false))
 {
       //// Your Checked Code Here ...
 }
 else
 {
      //// Your unchecked code here ...
 }

Это должно избежать повторного выполнения проверенного кода ...

Фактически, вместо того, чтобы обрабатывать несколько флажков для одного и того же обработчика события щелчка, вы можете использовать всплывающее окно присоединенного перенаправленного события под названием Button.Click.

  1. Обрабатывать кнопку. Нажмите на свой уровень DataGrid.

    <dg:DataGrid Button.Click="CheckBoxClick" ... >
            ....
    
  2. Назовите свой флажок в столбце шаблона.

    <CheckBox IsChecked="{Binding Selecting, UpdateSourceTrigger=PropertyChanged}" x:Name="LocalColumnCheckbox" />
    
  3. В обработчике CheckBoxClick используйте этот код ...

    private void CheckBoxClick(object sender, RoutedEventArgs e)
    {
            var checkBox = e.OriginalSource as CheckBox;
            if (checkBox != null && checkBox.Name == "LocalColumnCheckbox")
            {
                    if (checkBox.IsChecked.GetValueOrDefault(false))
                    {
                               //// Your Checked Code Here ...
                    }
                    else
                    {
                              //// Your unchecked code here ...
                    }
            }
    }
    

Дайте мне знать, если это поможет.

...