簡體   English   中英

C#/ WPF:ListView沒有更新(但是當我用Snoop檢查時,一切看起來都很好)

[英]C#/WPF: ListView not updating (but when I check with Snoop, everything looks fine)

有誰知道為什么我的帶有以下代碼的ListView無法正常工作? 我用Snoop進行了檢查,ItemsSource看起來還不錯(當我啟動Snoop時,ListView向我顯示MyViewModel.MyCollection,但是在使用Visual Studio進行調試時卻什么也沒顯示?)

謝謝!

PS: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輸出”窗口中查找,它將顯示您可能遇到的任何DataBinding錯誤,這可能有助於您解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM