C # / WPF: Listview nicht aktualisiert (aber wenn ich mit Snoop überprüfen, alles sieht gut aus)
Frage
Wer weiß, warum mein Listview-Code mit folgendem nicht? Ich habe es mit Snoop und die Itemssource scheint in Ordnung zu sein (und wenn ich Snoop starten, wird die Listview zeigt mir die MyViewModel.MyCollection, aber wenn sie mit Visual Studio Debuggen es zeigt mir nichts?)
Danke!
PS: MainWindow.xaml.cs hat die 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>
Das Ansichtsmodell sieht wie folgt aus:
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"); }
}
}
und
public class SummaryViewModel : ViewModelBase
{
public ObservableCollection<MyDate> MyCollection { get; set; }
}
und
public class MyDate
{
public DateTime CalcDate { get; set; }
}
Lösung
Wer setzt MyCollection
? Es bietet nicht Änderungsmitteilung, so dass die Bindung nicht weiß, dass es geändert wurde. Wechseln zu:
private ObservableCollection<MyDate> _myCollection;
public ObservableCollection<MyDate> MyCollection
{
get { return _myCollection; }
set
{
_myCollection = value;
OnPropertyChanged("MyCollection");
}
}
Oder, noch besser, macht es read-only:
private readonly ICollection<MyDate> _myCollection = new ObservableCollection<MyDate>();
public ICollection<MyDate> MyCollection
{
get { return _myCollection; }
}
Andere Tipps
Suchen Sie in der Visual Studio Ausgabefenster, wird es keine Fehler Databinding zeigen, dass Sie werden immer die Sie das Problem beheben kann helfen.