2

シンプルなウィンドウフォン7ページを作成しています。私は(MVVMライトを使用して)MVVMを実行し、List<Category>typeプロパティをにバインドしてい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常に空です。私はここで何か間違ったことをしていますか?

4

3 に答える 3

1

アプリケーションの実行中に出力にXamlバインディングエラーが表示されますか?

また、親要素(グリッド)でDataContextをバインドしている場合は、ListPickerでDataContextをバインドする必要はありません。これはあなたの問題かもしれませんが、バインディングエラーはいくつかの詳細な情報を与えるはずです。

于 2011-09-26T16:20:54.223 に答える
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}"

これで動作しました。

于 2011-09-29T06:03:20.193 に答える
0

リソースのキーがタイプと同じであることが問題である可能性があります。大文字と小文字を変更するか、完全に名前を変更できます。

試す:

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

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

また、グリッドのDataContextとListPickerを同じものに設定する必要はありません。ListPickerでVMLのみを使用している場合は、グリッドにも設定しません。

TwoWay選択したアイテムを追跡する必要があるため、ListPickerでバインディングを使用する必要があります

于 2011-09-26T16:50:33.507 に答える