C # / WPF: Listview nicht aktualisiert (aber wenn ich mit Snoop überprüfen, alles sieht gut aus)

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

  •  22-07-2019
  •  | 
  •  

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; }
}
War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top