2011-09-26 99 views
2

我正在构建一个简单的windown电话7页。我正在做MVVM(使用MVVM光源)并将List<Category>类型属性绑定到ListPicker。这家酒店是在一个名为AddExpenseViewModel像一个视图模型定义如下ListPicker不适用于MVVM Light

public class AddExpenseViewModel:ViewModelBase 
{ 
    public List<Category> Categories 
    { 
     get { return categories; } 
     set 
     { 
      categories = value; 
      RaisePropertyChanged("Categories"); 
     } 
    } 
} 

Category类定义为

public class Category 
{ 
    public string Name { get; set; } 
} 

在我的XAML我首先定义一个资源为

<UserControl.Resources> <bs:ViewModelLocator x:Key="ViewModelLocator" /> </UserControl.Resources>

然后将包含ListPicker的网格的DataContext设置为

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

这里是我的ListPicker

<toolkit:ListPicker 
      HorizontalAlignment="Left" 
      Height="50" 
      Width="200" 
      Grid.Row="2" 
      Grid.Column="1" 
      DataContext="{Binding AddExpenseViewModel}" 
      ItemsSource="{Binding Path=Categories, Mode=OneWay}" > 
      <toolkit:ListPicker.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Orientation="Horizontal"> 
         <Border Background="LightGreen" Width="*" Height="*"> 
          <TextBlock Text="{Binding Name}"></TextBlock> 
         </Border> 
        </StackPanel> 
       </DataTemplate> 
      </toolkit:ListPicker.ItemTemplate> 
</toolkit:ListPicker>` 

这不起作用XAML。 ListPicker总是空的。我在这里做错了什么?

回答

1

我得到这个很多消防的工作后,我应该使用一个TwoWay结合了ListPicker。这是我改变得到这个工作

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

public class Categories : ObservableCollection<Category> 
{ 
} 

然后,我改变了我的AddExpenseViewModel属性分类如下

public Categories Categories 
{ 
    get { return categories; } 
    set 
    { 
     categories = value; 
     RaisePropertyChanged("Categories"); 
    } 
} 
private Categories categories; 

然后,我改变了ItemsSource listpicker as

ItemsSource="{Binding Path=Categories}" 

这让它工作。

1

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

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

+0

我看到输出窗口中的绑定错误,但这并没有什么帮助。如果我删除了ListPicker的DataContext,那么我得到一个类型为MS.Internal.WrappedException并带有“0x8000ffff”作为消息的异常。我正在更新有关更多详细信息的问题。 – Suhas

+0

你可以发布你在绑定窗口中看到的消息吗?它通常解释什么是财产失败和如何。 – jonathanpeppers

+0

我的问题已修复。我已经更新了这个问题的详细信息 – Suhas

0

让您的资源的密钥与类型相同可能是问题。您可以更改案例或完全重命名。

尝试:

<bs:ViewModelLocator x:Key="locator" /> 

DataContext="{Binding AddExpenseViewModel, Source={StaticResource locator}}" 

你也应该不会需要设置网格的DataContext和ListPicker以同样的事情。如果你只在ListPicker中使用VML,我也不会在网格中设置它。

,因为它需要跟踪选定的项目

+0

如果我删除了ListPicker的DataContext,那么我得到一个异常类型MS.Internal.WrappedException与“0x8000ffff”作为消息。我正在更新有关更多详细信息的问题。 – Suhas

+0

我找到了这个错误的原因。它与数据绑定没有任何关系。 ItemTemplate中的边框将高度和宽度设置为“*”。将其更改为“Auto”后,异常消失 – Suhas