С#/WPF:ListView не обновляется (но когда я проверяю с помощью Snoop, все выглядит нормально)

StackOverflow https://stackoverflow.com/questions/1228058

  •  22-07-2019
  •  | 
  •  

Вопрос

Кто-нибудь знает, почему мой ListView со следующим кодом не работает?Я проверил это с помощью Snoop, и с ItemsSource все в порядке (и когда я запускаю Snoop, ListView отображает MyViewModel.MyCollection, но при отладке с помощью Visual Studio он ничего не показывает?)

Спасибо!

ПС:MainWindow.xaml.cs имеет DataContext = MainViewModel.

    <ListView Grid.Row="1" Margin="38,50,0,168" HorizontalAlignment="Left" Name="listViewSelectDate" Width="105"
              ItemsSource="{Binding Path=MyViewModel.MyCollection}" 
              SelectedItem="{Binding SelectedDate}" IsSynchronizedWithCurrentItem="True">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Date" DisplayMemberBinding="{Binding Path=CalcDate}"/>
            </GridView>
        </ListView.View>
    </ListView>

ViewModel выглядит следующим образом:

class MainViewModel : ViewModelBase
{
    public SummaryViewModel MyViewModel
    {
        get { return _myViewModel; }
        set { _myViewModel = value; RaisePropertyChanged("MyViewModel"); }
    }
    public MyDate SelectedDate
    {
        get { return _selectedDate; }
        set { _selectedDate = value; RaisePropertyChanged("SelectedDate"); }
    }
}

и

public class SummaryViewModel : ViewModelBase
{
    public ObservableCollection<MyDate> MyCollection { get; set; }
}

и

public class MyDate
{
    public DateTime CalcDate { get; set; }
}
Это было полезно?

Решение

Кто устанавливает MyCollection?Он не предоставляет уведомление об изменении, поэтому привязка не знает, что она была изменена.Изменить на:

private ObservableCollection<MyDate> _myCollection;
public ObservableCollection<MyDate> MyCollection
{
    get { return _myCollection; }
    set
    {
        _myCollection = value;
        OnPropertyChanged("MyCollection");
    }
}

Или, что еще лучше, сделайте его доступным только для чтения:

private readonly ICollection<MyDate> _myCollection = new ObservableCollection<MyDate>();

public ICollection<MyDate> MyCollection
{
    get { return _myCollection; }
}

Другие советы

Посмотрите в окно вывода Visual Studio, оно покажет любые ошибки привязки данных, которые могут возникнуть, что может помочь вам решить проблему.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top