2

我正在构建一个简单的 windows phone 7 Page。我正在做 MVVM(使用 MVVM 灯)并将List<Category>类型属性绑定到ListPicker. 该属性在一个视图模型中定义,AddExpenseViewModel如下所示

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>

然后设置DataContext包含ListPickeras的网格的

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

这是我的 XAMLListPicker

<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>`

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

4

3 回答 3

1

经过大量的灭火,我得到了这个自己的工作。这是我为使其正常工作所做的更改

我介绍了一个新的类如下

public class Categories : ObservableCollection<Category>
{
}

然后我更改了 AddExpenseViewModel 上的属性类别,如下所示

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

然后我将 listpicker 上的 ItemsSource 更改为

ItemsSource="{Binding Path=Categories}"

这让它工作了。

于 2011-09-29T06:03:20.193 回答
1

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

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

于 2011-09-26T16:20:54.223 回答
0

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

尝试:

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

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

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

您应该使用TwoWay与 ListPicker 的绑定,因为它需要跟踪所选项目

于 2011-09-26T16:50:33.507 回答