Liste öğesi için düğme nasıl belirlenir

Listeye bağlı UserNames nesnesine nasıl erişirim?

Şimdiye kadar ne yaptım:

Listenin kalemi benim durumumdaki nesnedir:

 new List();
 this.users.Add(new UserNames() {Id = 1, UserName = "name 1"});

Etiket ve butona sahip olduğum veri şablonunu kullanıyorum.

Listem şu şekildedir:


            
                
                    
                        
                            
                        
                        
                            <button Name="MyButton" Content="Click Me" Click="MyButton_Click">

                            </button>
                        
                    
                
            
        

Düğme için yöntemim nerede. Görebildiğiniz gibi, ebeveyn seçeneğini kullanmayı denedim, ama başarılı olamadım

 private void MyButton_Click(object sender, RoutedEventArgs e)
        {
            //StackPanel panel = (StackPanel)((Button)sender).Parent;
            //WrapPanel wrapPanel = (WrapPanel) panel.Parent;
            //ListItem listItem = (ListItem) wrapPanel.Parent;
            //ListBox box = (ListBox) listItem.Parent;
            //UserNames itemToReport = (UserNames) (box.SelectedItem);
            //MessageBox.Show(itemToReport.UserName);


        }
1

4 cevap

KullanıcıAdı nesnesiniz olacağı için, Button'un DataContext 'ını kullanabilirsiniz.

private void MyButton_Click(object sender, RoutedEventArgs e)
{
    Button b = sender as Button;
    UserNames data = b.DataContext as UserNames;

    MessageBox.Show(data.UserName);
}

Düğmeler, Liste Kutuları, Metin Kutuları vb. Gibi UI nesneleri, DataContext <�üstüne yerleştirilmiş güzel bir katman iken, wpf ile uygulamanızın DataContext olduğunu her zaman düşündüm. Kullanıcının onunla etkileşimde bulunmasına izin vermek için/code>.

1
katma
@Dabblernl Evet, ViewModel'e bir RelayCommand kullanmanın tam bir örneğini yazmayı düşündüm, ama OP bunu wpf için yeni gibi görünüyor, bu yüzden onu korkutamayacağım :)
katma yazar Rachel, kaynak
Bu, UI öğesini bir bussinesslayer sınıfına geri göndermemiz gerektiğini kabul ettiğimiz sürece doğrudur. Ama daha iyi bir cevap, ikisinin de nasıl tamamen ayrılacağına işaret etmektir. Bkz. Q: stackoverflow.com/questions/1384369/… örneğin.
katma yazar Dabblernl, kaynak
Bu tam olarak ihtiyacım olan şey. Çözümünüzü basit olarak beğendim, ama harika bir açıklama var. teşekkür ederim
katma yazar cpoDesign, kaynak

XAML'de, Tag özelliğini geçerli öğeye ayarlayın.

Tıklama işleyicisinde geri gönderin.

Usernames user = (Düğme olarak gönderici). Usbames olarak geç;

1
katma

Bir veri toplama işlemini bağlamak için genellikle bir ObservableCollection kullanmak daha kolaydır (eğer veriler çalışma zamanını değiştiriyorsa). Bağlama işlemini yaptığınızda, bir datacontext, bir veri kaynağı ve bir veriyolu tanımlamanız gerekir. MSDN'de bağlama hakkında daha fazla bilgi vermenizi tavsiye ederim: D

0
katma

Bu senin için çalışacak -

MessageBox.Show(((sender as Button).DataContext as UserNames).UserName);
0
katma