我有一个示例windows phone 7项目,我测试了一些MVVM的东西,但是我遇到了一个问题。
我的代码如下所示:
这是来自我的View,它是一个MainPage:
<Grid>
<ListBox x:Name="list" ItemsSource="{Binding _reviews}"/>
</Grid>
这是视图背后的代码:
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中的绑定
答案 0 :(得分:0)
问题是您的视图模型类没有实现INotifyPropertyChanged
接口,并且您没有引发PropertyChanged
事件,因此视图不知道您绑定的属性已更改。
如果您不确定如何实施此界面,请查看this post on Silverlight Show。
更新:对于大多数属性,上面的描述都是正确的,但是,在这种情况下,因为它是ObservableCollection
,所以没有必要。但是,因为视图模型类不是公共的,所以视图无法绑定到它。在调试时,您是否在“输出”窗口中看到任何绑定错误?