我正在建造一个简单的windown手机7页。我正在使用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
的网格的ListPicker
设置为
<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>`
这不起作用。 ListPicker
始终为空。我在这里做错了吗?
答案 0 :(得分:1)
在运行应用程序时,您是否在输出中看到任何Xaml绑定错误?
如果您在父元素(您的网格)上执行此操作,您也不必在ListPicker上绑定DataContext。这可能是您的问题,但绑定错误应该提供一些详细信息。
答案 1 :(得分:1)
我介绍了一个新课程,如下所示
public class Categories : ObservableCollection<Category>
{
}
然后我在AddExpenseViewModel上更改了属性Categories,如下所示
public Categories Categories
{
get { return categories; }
set
{
categories = value;
RaisePropertyChanged("Categories");
}
}
private Categories categories;
然后我将listpicker上的ItemsSource更改为
ItemsSource="{Binding Path=Categories}"
这已经成功了。
答案 2 :(得分:0)
让资源的密钥与类型相同可能是问题。您可以更改案例或完全重命名。
尝试:
<bs:ViewModelLocator x:Key="locator" />
和
DataContext="{Binding AddExpenseViewModel, Source={StaticResource locator}}"
您也不需要将Grid的DataContext和ListPicker设置为相同的东西。如果您只在ListPicker中使用VML,我也不会在网格上设置它。
您应该使用TwoWay
绑定ListPicker,因为它需要跟踪所选项目