【发布时间】:2011-02-06 11:22:55
【问题描述】:
我有一个示例 windows phone 7 项目,我在其中测试了一些 MVVM 的东西,但是我遇到了一个问题。
我的代码如下所示:
这是来自我的主页面视图:
<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 中的绑定来设置
【问题讨论】:
-
我唯一需要添加的是
public到class Review。除此之外,ItemsSource 绑定工作正常。如果您使用您在此处发布的代码创建一个新项目,是否能够重现此问题? -
我创建了新项目,代码与我发布的完全相同(公开了 Review 类),但它仍然不起作用。
-
好的,我上传了我的示例项目。如果你试试这个,你会遇到同样的问题吗? mediafire.com/?4r4n4lazau242mm
-
除了一个关键字,完全一样!我错过了 ViewModel 类的公开声明。将其设置为公开可以解决问题。你知道为什么必须公开 ViewModel 吗?
标签: windows data-binding mvvm windows-phone-7 itemssource