Windows phone 7 ListPicker不使用MVVM指示灯

Windows phone 7 ListPicker不使用MVVM指示灯,windows-phone-7,mvvm,mvvm-light,listpicker,Windows Phone 7,Mvvm,Mvvm Light,Listpicker,我正在构建一个简单的windown phone 7页面。我正在做MVVM(使用mvvmlight)并将Listtype属性绑定到ListPicker。该属性在名为AddExpenseViewModel的视图模型中定义,如下所示 public class AddExpenseViewModel:ViewModelBase { public List<Category> Categories { get { return categories; }

我正在构建一个简单的windown phone 7页面。我正在做MVVM(使用mvvmlight)并将
List
type属性绑定到
ListPicker
。该属性在名为
AddExpenseViewModel
的视图模型中定义,如下所示

public class AddExpenseViewModel:ViewModelBase 
{
    public List<Category> Categories
    {
        get { return categories; }
        set
        {
            categories = value;
            RaisePropertyChanged("Categories");
        }
    }
}
在我的XAML中,我首先将资源定义为


然后将包含
列表选择器的网格的
DataContext
设置为

<Grid x:Name="ContentPanel" 
              Grid.Row="1" 
              Margin="13,1,11,-1" 
              DataContext="{Binding Path=AddExpenseViewModel, 
                                    Source={StaticResource ViewModelLocator}}">

这是行不通的。
列表选择器始终为空。我在这里做错了什么吗?

在运行应用程序时,是否在输出中看到任何Xaml绑定错误


如果要在父元素(网格)上绑定DataContext,也不必在ListPicker上绑定它。这可能是您的问题,但绑定错误应该提供一些详细信息。

资源的密钥与类型相同可能是问题所在。您可以更改大小写或完全重命名

尝试:

您也不需要将网格的DataContext和ListPicker设置为相同的内容。如果您只在ListPicker中使用VML,我也不会在网格上设置它


你应该使用一个双向的
绑定和一个列表选择器,因为它需要跟踪所选的项目

经过大量的消防工作后,我自己得到了这个。这是我为了让它工作而做的改变

我介绍了一个新的类,如下所示

public class Categories : ObservableCollection<Category>
{
}
然后我将listpicker上的ItemsSource更改为

ItemsSource="{Binding Path=Categories}"

这使它工作起来。

我在输出窗口中看到绑定错误,但这没有多大帮助。如果删除ListPicker的DataContext,则会得到一个MS.Internal.WrappedException类型的异常,消息为“0x8000ffff”。我正在更新问题的更多细节。你能在绑定窗口中发布你看到的消息吗?它通常解释了什么属性失败以及如何失败。我的问题已经解决了。我已经用详细信息更新了问题。如果我删除ListPicker的DataContext,那么我会得到一个MS.Internal.WrappedException类型的异常,消息为“0x8000ffff”。我正在用进一步的细节更新问题。我找到了此错误的原因。它与数据绑定无关。ItemTemplate中的边框的高度和宽度设置为“*”。将此项更改为
Auto
后,异常消失
<bs:ViewModelLocator x:Key="locator" /> 
DataContext="{Binding AddExpenseViewModel, Source={StaticResource locator}}"
public class Categories : ObservableCollection<Category>
{
}
public Categories Categories
{
    get { return categories; }
    set
    {
        categories = value;
        RaisePropertyChanged("Categories");
   }
}
private Categories categories;
ItemsSource="{Binding Path=Categories}"