0

いくつかの MVVM をテストする Windows Phone 7 プロジェクトのサンプルがありますが、問題が発生しました。

私のコードは次のようになります。

これは、MainPage である私のビューからのものです。

  <Grid>
        <ListBox x:Name="list" ItemsSource="{Binding _reviews}"/>
    </Grid>

これは、View のコード ビハインドです。

      public MainPage()
        {
            this.Loaded += MainPage_Loaded;
            // Line below makes list show what it is supposed to show
            // list.ItemsSource = (DataContext as MainPageVM)._reviews;
            DataContext = new MainPageVM();
            InitializeComponent();
        }

        void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
            // DataContext is set to the right object!
            var obj = list.DataContext;
        }

ViewModel のコード

class MainPageVM
{
    public ObservableCollection<Review> _reviews { get; set; }

    public MainPageVM()
    {
        _reviews = GetReviews();
    }

    private ObservableCollection<Review> GetReviews()
    {
        ObservableCollection<Review> reviews = new ObservableCollection<Review>();
        reviews.Add(new Review() { User = "Lol", Text = "Cool", Country = "UK"});
        reviews.Add(new Review() { User = "misterX", Text = "aWESCOM APP", Country = "USA"});
        reviews.Add(new Review() { User = "meYou", Text = "The best", Country = "UK"});

        return reviews;
    }

そして、ここに私のモデルがあります:

class Review
{
    public string Text { get; set; }
    public string User { get; set; }
    public string Country { get; set; }
}

エラーの場所と、コード ビハインドで ItemSource を設定できるのに、XAML でのバインディングでは設定できない理由を指摘してください。

4

1 に答える 1

0

問題は、ビュー モデル クラスがINotifyPropertyChangedインターフェイスを実装しておらず、PropertyChangedイベントを発生させていないため、バインド先のプロパティが変更されたことをビューが認識できないことです。

このインターフェイスの実装方法がわからない場合は、Silverlight Show に関するこの投稿を参照してください。

更新:ほとんどのプロパティでは上記が当てはまりますが、この場合ObservableCollectionは必要ないためです。ただし、ビュー モデル クラスが公開されていないため、ビューをバインドできません。デバッグ中に [出力] ウィンドウにバインド エラーが表示されますか?

于 2011-02-06T11:35:30.137 に答える