2011-08-01 25 views
0

重复每个MessageBox.Show(this.myProduct.Radif.ToString()); !!!!关于数据网格中CheckBox的问题

发生了什么事?

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

回答

0

复选框的选中/未选中的事件实际上是原始ToggleButton.Checked /未经检查的类型和它们的用法不被鼓励开发者社区。

相反,你可以处理CheckBox.Click事件和处理程序内....

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

这些应该避免检查代码的重复执行...

事实上,而不是具有多复选框处理到相同的单击事件处理程序,您可以使用名为Button.Click的附加路由事件冒泡。

  1. Handle Button.Click在您的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 ... 
           } 
         } 
    } 
    

让我知道,如果这有助于。

+0

最佳答案。我非常感谢你 – mrJack