C#/ WPF:ListView控件不更新(但是当我探听检查,一切正常)
题
有谁知道为什么我用下面的代码的ListView不工作? 我检查出来有史努比和的ItemsSource似乎是罚款(当我开始史努比,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>
在视图模型看起来像这样:
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 Output窗口,它会显示你可以得到任何数据绑定错误,这可能帮助您解决问题。
不隶属于 StackOverflow