【问题标题】:C#/WPF: ListView not updating (but when I check with Snoop, everything looks fine)C#/WPF:ListView 没有更新(但是当我使用 Snoop 检查时,一切看起来都很好)
【发布时间】:2010-11-16 17:11:44
【问题描述】:

有谁知道为什么我的 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; }
}

【问题讨论】:

    标签: wpf listview refresh snoop


    【解决方案1】:

    谁设置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; }
    }
    

    【讨论】:

    • 实际上我认为 ObservableCollection 不需要 OnPropertyChanged(在我的例子中是 RaisePropertyChanged),因为它已经实现了 INotifyPropertyChanged (msdn.microsoft.com/de-de/library/ms668604.aspx)。不管怎样,我也试过了,它似乎不起作用..
    【解决方案2】:

    查看 Visual Studio 输出窗口,它会显示您可能遇到的任何 DataBinding 错误,这可能会帮助您解决问题。

    【讨论】:

    • 你指的是哪个窗口? :-) 我不知道 Visual Studio 可以显示 WPF DataBindings
    猜你喜欢
    • 1970-01-01
    • 2019-08-21
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多