Выбранный элемент не получается для списка в другом шаблоне элемента списка

I have a PrimaryItems List & foreach PrimaryItem there is a SecondaryItems list.So i used a ListBox as ItempTemplate of another ListBox.


        
            
                
                    
                    
                        
                            
                                
                            
                        
                    
                
            
        
    


My View Model Code

    private List _primaryItems;
    public List PrimaryItems
    {
        get { return _primaryItems; }
        set { _primaryItems = value;RaisePropertyChanged(); }
    }

    //SecondaryItems list is inside in each PrimaryItem
    //private List _secondaryItems;
    //public List SecondaryItems
    //{
      //get { return _secondaryItems; }
      //set { _secondaryItems = value; RaisePropertyChanged(); }
    //}

    private SecondaryItem _selectedSecondaryItem;
    public SecondaryItem SelectedSecondaryItem
    {
        get { return _selectedSecondaryItem; }
        set 
        {
            _selectedSecondaryItem = value;
            if (_selectedSecondaryItem != null)
            {
                //TO DO
            }
        }
    }

This is the class structure

public class PrimaryItem
{
  public int Id { get; set; }
  public string Name { get; set; }
  public List SecondaryItems{ get; set; }
}

public class SecondaryItem
{
  public int Id { get; set; }
  public string Name { get; set; }  
}

and I set SelectedItem Binding to the Second ListBox.
But am not getting the Selection Trigger on Second ListBox.
Can we use a ListBox inside another ListBox` Template ?
If yes how do we overcome this problem?

1
nl ja de
привет @ Андрей Гордеев я добавил viewdel code.please проверить его.!
добавлено автор asitis, источник
Показать код ViewModel
добавлено автор Andrey Gordeev, источник

2 ответы

Прежде всего, используйте ObservableCollection вместо List , поскольку он реализует интерфейс INotifyPropertyChanged .

Насколько я понимаю ваши требования, класс PrimaryItem должен иметь свойство SecondaryItems . Поэтому удалите его из ViewModel и вставьте в класс PrimaryItem (а также свойство SelectedSecondaryItem ):

private ObservableCollection _secondaryItems;
public ObservableCollection SecondaryItems
{
    get { return _secondaryItems; }
    set { _secondaryItems = value; RaisePropertyChanged(); }
}

EDIT:

Я полностью воспроизвел вашу ситуацию и заработал ее.

Классы:

public class PrimaryItem
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List SecondaryItems { get; set; }

    private SecondaryItem _selectedSecondaryItem;
    public SecondaryItem SelectedSecondaryItem
    {
        get { return _selectedSecondaryItem; }
        set
        {
            _selectedSecondaryItem = value;

            if (_selectedSecondaryItem != null)
            {//My breakpoint here
                //TO DO
            }
        }
    }
}

public class SecondaryItem
{
    public int Id { get; set; }
    public string Name { get; set; }
}

ViewModel:

public class MyViewModel : ViewModelBase
{
    private List _primaryItems;
    public List PrimaryItems
    {
        get { return _primaryItems; }
        set { _primaryItems = value; RaisePropertyChanged("PrimaryItems"); }
    }

    public ErrorMessageViewModel()
    {
        this.PrimaryItems = new List
            {
                new PrimaryItem
                    {
                        SecondaryItems =
                            new List
                                {
                                    new SecondaryItem { Id = 1, Name = "First" },
                                    new SecondaryItem { Id = 2, Name = "Second" },
                                    new SecondaryItem { Id = 3, Name = "Third" }
                                },
                        Name = "FirstPrimary",
                        Id = 1
                    }
            };
    }
}

Вид:



    


    
        
            
                
                    
                    
                        
                            
                                
                            
                        
                    
                
            
        
    


0
добавлено
да, это была моя ошибка. Второй списокItems находится внутри каждого PrimaryItem. Даже я изменил тип коллекции как «ObservableCollection», не получая «SelectedItem»,
добавлено автор asitis, источник
No .SecondList - это коллекция SecondaryItem. Таким образом, выбранный элемент этого списка должен быть типом SecondaryItem. Поэтому я так и использовал
добавлено автор asitis, источник
Привет обновленный вопрос с структурой класса. Не могли бы вы проверить его?
добавлено автор asitis, источник
хорошая работа. Спасибо @ Andrey
добавлено автор asitis, источник
Свойство SelectedSecondaryItem в классе PrimaryItem ?
добавлено автор Andrey Gordeev, источник
Нет, я спросил, к какому классу SelectedSecondaryItem принадлежит?
добавлено автор Andrey Gordeev, источник
Переместить public SecondaryItem SelectedSecondaryItem {get ... set ...} из ViewModel в PrimaryItem class
добавлено автор Andrey Gordeev, источник
@asitis Я обновил свой ответ
добавлено автор Andrey Gordeev, источник
@asitis ты всегда приветствуешь
добавлено автор Andrey Gordeev, источник

Вы можете попытаться использовать LinqToVisualTree , он может получить alomost все Control s в вашем приложении, вам просто нужно выбрать то, что вы хотите найти (в вашем случае ListBoxItem ), а затем добавьте его в свою модель. Я использовал его, когда мне нужно было получить текст из TextBox , который был в ListboxItem . Но это также подходит для вашей задачи.

0
добавлено
Можете ли вы поделиться ссылкой на ссылку?
добавлено автор asitis, источник
добавлено автор user1947702, источник
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Про Windows
Про Windows
941 участник(ов)

Microsoft Windows и всё, что с этим связано. Список интересных групп и каналов: https://github.com/goq/telegram-list

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot