2013-05-09 2 views
0

У меня есть наблюдаемое объединение для создания кнопок, проблема в том, что каждая из этих кнопок вызывает тот же обработчик событий. Я пытаюсь сделать так, чтобы каждая кнопка имела свой уникальный идентификатор, чтобы их можно отличить друг от друга. код, используемый для создания элементов кнопкиИспользование наблюдаемого коллекционирования с кнопками

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

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

    } 
} 

I добавляет к 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 с помощью этого метода, системные сбои, любые рекомендации по устранению этого или любого другого решения, где каждая кнопка может иметь уникальный идентификатор

ответ

1

Вы можете использовать Button.Tag свойство для хранения ID и в обработчике проверить значение 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

Так что я попробовал это, но это, кажется, как теги значение остается NULL даже после того, как установлен ID – yawnobleix

+0

Трудно сказать, почему. Это должно сработать. Infact весь ваш объект данных должен быть в свойстве Button.DataContext. Может быть, вы должны проверить внутри обработчика события, что это значение button.DataContext – jure

+0

К сожалению я немного запутался, что вы говорите, прямо сейчас, что я делаю 'частная пустота Button_Click (объект отправителя, EventArgs е) { вар myButton = Convert.ToInt32 (this.Tag); } ' – yawnobleix

Смежные вопросы