2013-05-09 4 views
0

나는 observablecollection을 가지고 있는데, 버튼을 생성하는데 문제가있다. 각각의 버튼은 같은 이벤트 핸들러를 호출한다. 각 버튼마다 서로 구별 할 수 있도록 고유 한 ID를 갖도록하려고합니다. 버튼 요소를 생성하기 위해 사용되는 코드observablecollection with buttons 사용하기

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

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

    } 
} 

I 다음 코드

 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> 

이다에서 ObservableCollection에 추가되는 경우를 이 메서드로 Uid를 설정하려고 시도하면 시스템이 충돌합니다. 모든 권장 사항 또는 각 단추가 고유 한 ID를 가질 수있는 다른 솔루션을 수정하는 방법

01 23,516,

답변

1

당신은 ID를 저장하기 위해 Button.Tag 속성을 사용하고 핸들러에서

<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"> 

UPDATE 태그의 값을 검사 할 수 있습니다 : 버튼 클릭 핸들러

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

그래서 나는이 밖으로 시도를하지만 태그처럼 보인다 ID가 설정된 후에도 값이 남아 있습니다. – yawnobleix

+0

이유를 말하기 어렵습니다. 이것은 효과가있다. 사실 전체 데이터 객체는 Button.DataContext 속성에 있어야합니다. 아마 button.DataContext의 값인 이벤트 핸들러를 확인해야 할 것입니다. – jure

+0

죄송합니다. 지금 내가하고있는 일이 무엇인지, 혼란 스러워요. 'private void Button_Click (객체 발신자, EventArgs e) { var myButton = Convert.ToInt32 (this.Tag); }' – yawnobleix