вызовите ObservableCollection снова получите метод доступа в коде позади - PullRequest
0 голосов
/ 10 февраля 2019

Можно ли снова вызвать метод ObservableCollection get?мне нужно изменить ItemsSource в зависимости от выбора ComboBox, поэтому мне нужно снова вызвать мой ObservableCollection, это мой код

ObservableCollection<string> sampleData = new ObservableCollection<string>();
public ObservableCollection<string> SampleData
{
    get
    {
        if (sampleData.Count < 1)
            sampleData.Add(line);  

        return sampleData;
    }
}

, указанный выше код запускается один раз, когда приложение работает, но мне нужно вызвать его, когда изменился комбобокс

private void CmbFilter_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    switch (cmbFilter.SelectedIndex)
    {
        case 0:         
            break;
        case 1:
            break;
        case 2:
            break;
        case 3:
            break;
    }
}

1 Ответ

0 голосов
/ 11 февраля 2019

Смысл ObservableCollection в том, что вам не нужно реализовывать то, что вы предлагаете в вашем SampleData геттере.Здесь можно выбрать 2 подхода:

Использовать ObservableCollection

Обратите внимание, что здесь есть лучшие варианты, но они выходят за рамки вопроса.Поиск до SelectedItem привязок для ComboBox.

private void CmbFilter_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    // Modify your collection here based on what was selected.
}

Забудьте о ObservableCollection

Этот подход потребует от вас реализации INotifyPropertyChanged в вашем классе ViewModel.

public IEnumerabe<string> SampleData
{
    get
    {
        // Return values based on the selection.
        if (SelectedData == "FirstValueICareAbout") // SelectedData assumes you have investigated how to bind to the SelectedItem of a ComboBox.
        {
            return new[]
            {
                "FirstValue",
                "SecondValue"
            };    
        }

        return Enumerable.Empty<string>();
    }
}

private void CmbFilter_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    // Notify the UI that SampleData has changed using INotifyPropertyChanged implementation.
    RaiseNotifyPropertyChanged(nameof(SampleData));
}
...