2013-05-09 74 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