My ListView не будет читать элементы из ObservableCollection <T>, созданного из обычного списка <T> - PullRequest
1 голос
/ 21 июня 2020

Вот мой код

    public MainPage()
    {
        mytb.Add(dp1);
        mytb.Add(dp2);
        mytb.Add(dp3);
        mytb.Add(dp4);          
        InitializeComponent();
        this.BindingContext = this;
       
    }     
    public static List<Departments> mytb { get; set; } = new List<Departments>();   

    public ObservableCollection<Departments> mytb2 { get; set; } = new ObservableCollection<Departments>(mytb);     

    Departments dp1 = new Departments() { FullName = "kkkkkk" };
    Departments dp2 = new Departments() { FullName = "kkkkkk" };
    Departments dp3 = new Departments() { FullName = "kkkkkk" };
    Departments dp4 = new Departments() { FullName = "kkkkkk" };

Nathing появляется в моем ListView, когда я привязываю свой ListView ItemSource к mytb2, но когда я использую этот код

     public MainPage()
    {
        mytb.Add(dp1);
        mytb.Add(dp2);
        mytb.Add(dp3);
        mytb.Add(dp4);

        foreach (Departments dep  in mytb)
            {
                mytb2.Add(dep);
            }               
        
        InitializeComponent();
        this.BindingContext = this;
       
    }     
    public static List<Departments> mytb { get; set; } = new List<Departments>();   

    public  ObservableCollection<Departments> mytb2 { get; set; } = new ObservableCollection<Departments>();     

    Departments dp1 = new Departments() { FullName = "kkkkkk" };
    Departments dp2 = new Departments() { FullName = "kkkkkk" };
    Departments dp3 = new Departments() { FullName = "kkkkkk" };
    Departments dp4 = new Departments() { FullName = "kkkkkk" };

, он отлично работает . Я боюсь использовать foreach l oop, так как это может повлиять на производительность моего приложения, так как это решить?

заранее спасибо

Ответы [ 2 ]

1 голос
/ 21 июня 2020

вот еще одно решение, которое сработало так же хорошо, как сказал Джейсон, вот как я исправил эту проблему. Я просто добавил сюда эту строку кода

 mytb2  = new ObservableCollection<Departments>(mytb);

 public MainPage()
{
    mytb.Add(dp1);
    mytb.Add(dp2);
    mytb.Add(dp3);
    mytb.Add(dp4);
    mytb2  = new ObservableCollection<Departments>(mytb);          
    InitializeComponent();
    this.BindingContext = this;
   
}     
public static List<Departments> mytb { get; set; } = new List<Departments>();   

public ObservableCollection<Departments> mytb2 { get; set; }     

Departments dp1 = new Departments() { FullName = "kkkkkk" };
Departments dp2 = new Departments() { FullName = "kkkkkk" };
Departments dp3 = new Departments() { FullName = "kkkkkk" };
Departments dp4 = new Departments() { FullName = "kkkkkk" };
1 голос
/ 21 июня 2020

Рассмотрите возможность добавления INotifyPropertyChanged для вашей ObservableCollection mytb2. Со свойством по умолчанию это не привело бы к срабатыванию уведомления об изменении свойства в вашем пользовательском интерфейсе.

public event PropertyChangedEventHandler PropertyChanged;  
  
private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")  
{  
    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}

private ObservableCollection<Departments> _mytb2 = String.Empty;
public ObservableCollection<Departments> mytb2
{  
    get { return this._mytb2; }  
    set
    {
        if (value != this._mytb2)  
        {  
            this._mytb2 = value;  
            NotifyPropertyChanged();  
        }  
    }  
}  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...