2011-11-13 7 views
6

私はMVVMを初めて使用しています。また、WPFにはかなり新しいです。事実、数ヶ月前にプログラミングを始めました。 MVVMは本当にバインディングのコンセプトに頭を悩ましています。リストビックスからアイテムを選択できるアプリケーションを作るだけで、数日間試してみました。そして、追加ボタンをクリックすると、選択したアイテムは新しいリストに保存されます。 2番目のリストボックスには、追加された最新のアイテムが表示されます。アイテムを選択して、別のボタンを使用してアイテムを削除することもできます。 ususally私はclickイベントのために行って、かなり小さなメソッドで私のコードビハインドを飾るだろうが、私は本当にバインディングとコードビハインドを使用してこれをすべて行う方法を学びたい。 私は任意の助けめちゃめちゃ幸せになる、と私はこれに新しいですし、私は本当に可能な限りシンプルにそれを維持したいということを忘れないでくださいう:) 種類によっては、ダニエラコードビハインドなしでボタンをクリックして、リストボックスからリストにアイテムを追加するにはどうすればよいですか?

<WrapPanel HorizontalAlignment="Center" Margin=" 10"> 
    <ListBox x:Name="Firstbox" 
      Width="100" 
      ItemsSource="{Binding FoodList}" 
      DisplayMemberPath="Name" > 
    </ListBox> 
    <Button Margin="10 >Select</Button> 
    <ListBox Width="100"></ListBox> 

プライベートリストについて_foodList;

public List<FoodItem> FoodList 
    { 
     get { return _foodList; } 
     set { _foodList = value; } 
    } 

    private List<FoodItem> _newFoodList; 

    public List<FoodItem> NewFoodList 
    { 
     get { return _newFoodList; } 
     set { _newFoodList = value; } 
    } 

    public MainViewModel() 
    { 
     InitializeCommands(); 
     GetFood(); 
    } 
    private void GetFood() 
    { 
     FoodList = new List<FoodItem>() 
     { 
      new FoodItem() {Name="Applepie"}, 
      new FoodItem() {Name="Scones"} 
     }; 
    } 
+0

は、あなたの現在のコード –

+1

はあまりコードをお持ちでない:(持っている投稿します私はあなたがMVVMについての本を読むことができれば、あなたはこれを簡単に行うことができると示唆しているかもしれないが、これをどうすればいいのか分かりません( –

+0

)。しかし、あなたが今このタスクを達成するのを手助けするためには、ICommandを実装し、ボタンのコマンドプロパティにバインドする必要があります。それは非常に簡単ですし、あなたに役立つ多くの例を見つけることができます。 – BigL

答えて

7
  • まず、新しいアイテムが追加されたときにUIを検出できるように、ObservableCollection sのList Sを交換する必要があります。
  • あなたのViewModelにSelectedItemプロパティを追加します。

    private FoodItem _selectedItem; 
    public FoodItem SelectedItem 
    { 
        get { return _selectedItem;} 
        set 
        { 
         _selectedItem = value; 
         OnPropertyChanged("SelectedItem"); 
        } 
    } 
    
  • バインドこのプロパティへの第一ListBoxSelectedItemプロパティ:あなたの第二ListBoxバインド

    <ListBox Width=" 100" x:Name="Firstbox" 
         ItemsSource="{Binding FoodList}" 
         DisplayMemberPath="Name" 
         SelectedItem="{Binding SelectedItem}" /> 
    
  • NewFoodListプロパティ

  • 通信を作成するそして、あなたのViewModelに:

    private DelegateCommand _addItemCommand; 
    public ICommand AddItemCommand 
    { 
        get 
        { 
         if (_addItemCommand == null) 
         { 
          _addItemCommand = new DelegateCommand(AddItem); 
         } 
         return _addItemCommand; 
        } 
    } 
    
    void AddItem() 
    { 
        if (SelectedItem != null) 
         NewFoodList.Add(SelectedItem); 
    } 
    
  • そして最後に、AddItemCommandプロパティに、ボタンのCommandプロパティをバインド:

    <Button Margin="10" Command="{Binding AddItemCommand}" >Select</Button> 
    
+0

ありがとうございました!私は取得: "オブジェクト参照は、オブジェクトのインスタンスに設定されていない" AddItemメソッドで、あなたはどんなidaeを持っていますか? –

+1

私がデバッグすると、アイテムが選択されていることがわかりますが、NewFoodListには追加されません。 –

+0

@Daniela、コンストラクタのNewFoodListプロパティを初期化する必要があります: 'NewFoodList = new ObservableCollection ();' –

関連する問題