ListPicker не работает с MVVM Light - PullRequest
       21

ListPicker не работает с MVVM Light

2 голосов
/ 26 сентября 2011

Я строю простой ветреный телефон. Я делаю MVVM (используя MVVM light) и привязываю свойство типа 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}}">

А вот мой XAML для 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 всегда пусто. Я что-то здесь не так делаю?

Ответы [ 3 ]

1 голос
/ 29 сентября 2011

После большого количества пожаротушения я заставил это работать самостоятельно.Вот что я изменил, чтобы заставить это работать

Я ввел новый класс, как показано ниже

public class Categories : ObservableCollection<Category>
{
}

Затем я изменил свойство Categories в моей AddExpenseViewModel, как показано ниже

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

Затем я изменил ItemsSource на listpicker как

ItemsSource="{Binding Path=Categories}"

Это заставило его работать.

1 голос
/ 26 сентября 2011

Видите ли вы какие-либо ошибки привязки Xaml в выводе при запуске приложения?

Вам также не нужно связывать DataContext в ListPicker, если вы делаете это для родительского элемента (вашей Grid). Это может быть вашей проблемой, но ошибки привязки должны дать некоторую подробную информацию.

0 голосов
/ 26 сентября 2011

Вероятно, проблема в том, что ключ вашего ресурса совпадает с типом. Вы можете изменить регистр или переименовать полностью.

Попытка:

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

и

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

Вам также не нужно устанавливать DataContext для Grid и ListPicker в одно и то же. Если вы используете только VML в ListPicker, я бы не стал устанавливать его и в сетке.

Вы должны использовать привязку TwoWay с ListPicker, поскольку она должна отслеживать выбранный элемент

...