2013-05-09 71 views
0

我有一个observablecollection来创建按钮,问题是这些按钮中的每一个都调用相同的事件处理函数。我正在努力使每个按钮都有自己独特的ID,以便它们可以相互区分。用于创建按钮元素代码是使用带按钮的observablecollection

public class button 
{ 
    public bool IsEmpty { get; set; } 
    public int ID {get; set;} 

    public button(int button_Number) 
    { 
     IsEmpty = true; 
     ID = button_Number; 

    } 
} 

我被添加到的ObservableCollection在下面的代码

 ButtonCollection = new ObservableCollection<cChipVM>(); 

     for (int i = 0 ; i < iNumChips ; ++i) 
     { 
      ButtonCollection.Add(new button(i)); 

     } 

按钮的XML是以下

<DataTemplate x:Key="ButtonTemplate"> 
     <Button x:Name="Button" Uid="{Binding Path=ID}" Click="Button_Click" BorderBrush="Black" BorderThickness="1" Margin="7" Width="25" Height="25" ClickMode="Press" Opacity="0.9" Focusable="False" IsHitTestVisible="True" AllowDrop="True" IsTabStop="False"> 
      <Button.Style>      
       <Style> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding Path=IsEmpty}" Value="false"> 
          <Setter Property="Button.Background"> 
           <Setter.Value> 
            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
             <GradientStop Color="#FF5ED426" Offset="0"/> 
             <GradientStop Color="White" Offset="1"/> 
            </LinearGradientBrush> 
           </Setter.Value> 
          </Setter> 
         </DataTrigger> 
         <DataTrigger Binding="{Binding Path=IsEmpty}" Value="true"> 
          <Setter Property="Button.Background"> 
           <Setter.Value> 
            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
             <GradientStop Color="#FF1766F0" Offset="0"/> 
             <GradientStop Color="White" Offset="1"/> 
            </LinearGradientBrush> 
           </Setter.Value> 
          </Setter> 
         </DataTrigger> 

        </Style.Triggers> 
       </Style> 
      </Button.Style> 
     </Button> 
    </DataTemplate> 

当尝试使用这种系统崩溃的方法设置Uid,任何建议如何解决这个或任何其他解决方案,其中每个按钮可以有一个唯一的ID

回答

1

可以使用Button.Tag属性存储ID并在处理程序检查

<Button Tag="{Binding Path=ID}" Click="Button_Click" BorderBrush="Black" BorderThickness="1" Margin="7" Width="25" Height="25" ClickMode="Press" Opacity="0.9" Focusable="False" IsHitTestVisible="True" AllowDrop="True" IsTabStop="False"> 

更新变量的值:按钮点击处理

public void Button_Click(object sender,EventArgs e) 
{ 
     var myButton = (Button)sender; 
     int id = Convert.ToInt32(myButton.Tag); 
} 
+0

所以,我想这一点,但它似乎像标签即使在设置ID后,值仍然为NULL – yawnobleix 2013-05-09 16:29:41

+0

很难说明原因。这应该工作。 Infact你的整个数据对象应该在Button.DataContext属性中。也许你应该检查事件处理中有什么button.DataContext – jure 2013-05-09 16:32:18

+0

的价值对不起,我有点糊涂,你说的话,现在我正在做的事情是 '私人无效Button_Click(对象发件人,EventArgs的){ VAR myButton = Convert.ToInt32(this.Tag); }' – yawnobleix 2013-05-09 16:42:41