C#/ WPF:ListViewが更新されません(ただし、Snoopで確認すると、すべてが正常に見えます)
質問
次のコードのリストビューが機能しない理由を誰もが知っていますか? 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"); }
}
}
and
public class SummaryViewModel : ViewModelBase
{
public ObservableCollection<MyDate> MyCollection { get; set; }
}
and
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エラーが表示されます。
所属していません StackOverflow