Ro'yxat elementining tugmachasini qanday aniqlash mumkin

Qanday qilib men ro'yxatga bog'langan ob'ekt UserNamesga kirishim mumkin?

Hozirgacha nima qildim:

Ro'yxatning obyekti mening ishimda ob'ektdir:

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

Menda yorliq va tugma mavjud bo'lgan ma'lumotlar shablonini ishlataman.

Mening ro'yxatim quyidagicha:


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

                            </button>
                        
                    
                
            
        

Button uchun usulim qayerda. Ko'rib turganingizdek, ota-ona optsiyasidan foydalanishga harakat qildim, ammo muvaffaqiyatsiz edi

 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 javoblar

Siz UserName obyekti bo'ladi, chunki DataContext tugmasidan foydalanishingiz mumkin

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

    MessageBox.Show(data.UserName);
}

DataContext tugmachasi, ListBoxlar, TextBoxes va boshqalar kabi interfeyslarni oddiygina DataContext ni foydalanuvchi bilan muloqot qilish imkonini beradi.

1
qo'shib qo'ydi
@Dabblernl Ha, men RelayCommandni ViewModel-ga ishlatishning to'liq namunasini yozishni o'yladim, lekin OP men uni qo'rqitmaganday o'ylab, wpf uchun yangi ko'rinadi :)
qo'shib qo'ydi muallif Rachel, manba
UI-elementni bussinesslayer sinfiga qaytarishimiz kerakligini qabul qilsak, bu to'g'ri. Biroq, bularning barchasini qanday qilib ajratish kerakligini ko'rsatish yaxshiroq bo'ladi. Q.ga qarang: stackoverflow.com/questions/1384369/… masalan.
qo'shib qo'ydi muallif Dabblernl, manba
Bu men zarur bo'lgan narsadir. Men sizning yechimingizni soddagina yoqtirasiz, lekin juda yaxshi tushuntirishingiz bor. rahmat
qo'shib qo'ydi muallif cpoDesign, manba

XAML-da Tag xususiyatini joriy elementga o'rnating.

Tugatish dastagida uni qayta tashlang.

Foydalanuvchi nomlari user = (jo'natuvchini Button sifatida).

1
qo'shib qo'ydi

Datacollectionni bog'lash uchun tez-tez ObservableCollection (ma'lumotlar ish vaqti o'zgartirilsa) dan foydalanish osonroq bo'ladi. Agar ulanishni amalga oshirsangiz, datacontext, datasoure va datapath belgilashingiz kerak. MSDN bo'yicha majburiyligi haqida ko'proq ma'lumot olish uchun maslahat beraman: D

0
qo'shib qo'ydi

Bu siz uchun ishlaydi -

MessageBox.Show(((sender as Button).DataContext as UserNames).UserName);
0
qo'shib qo'ydi