2016-03-21 5 views
0

私は車を含む観測可能なコレクション「車」を持って、クラスの「車」「自転車」や「バン」、それぞれがから継承された「車両クラス、オブジェクトをobservableCollectionで編集するには、リストボックスで選択して新しいウィンドウを開いて編集します。 #

public ObservableCollection<Vehicle> vehicles = new ObservableCollection<Vehicle>(); 

Car car3 = new Car("Volkswagon", "Golf", "8000", "Red", "2000", "300000", "not so bad", "1.5litre", Car.BodyType.Hatchback); 
      Car car4 = new Car("Audi", "A6", "19000", "Red", "20014", "20000", "hannnnndy", "2litre", Car.BodyType.Saloon); 

      vehicles.Add(car1); 
      vehicles.Add(car2); 
      vehicles.Add(car3); 
      vehicles.Add(car4); 

      Van van1 = new Van("Ford", "transit", "25000", "white", "2008", "100000", "lovely red car", "1.4litre", Van.WheelBase.Medium, Van.VanType.Unlisted); 
      Van van2 = new Van("Citroen", "berlingo", "2000", "silver", "2006", "20100", "lovely", "1.4litre", Van.WheelBase.Long, Van.VanType.PanelVan); 

C WPFこれらの車両は、表示されていますリストボックス「lbxVehicles」

lbxVehicles.ItemsSource = vehicles; 

は私がリストボックスに表示されている車のいずれかを選択できるようにする必要があると私は編集ボタンをクリックすると、新しいウィンドウを開き、詳細を編集し、私はボタンをクリックしたとき新しいウィンドウで、観測可能なコレクション内の選択されたオブジェクトが編集されます。何をしようとしていたのですか。最初のウィンドウ:

private void Button_ClickEdit(object sender, RoutedEventArgs e) 
      { 
       Vehicle selVehicle = lbxVehicles.SelectedItem as Vehicle; 
       if (selVehicle != null) 
       { 
        WindowEdit winE = new WindowEdit(); 
        winE.Owner = this; 
        winE.edit = selVehicle; 
        winE.ShowDialog(); 
       } 
      } 

は、ウィンドウ2に:

public partial class WindowEdit : Window 
    { 
     public object edit = new object(); 
     public WindowEdit() 
     { 
      InitializeComponent(); 
     } 

これは、私が試しただけのものですが、私はそれが間違っているかなり確信しています。どのような助けも大歓迎です。できるだけ多くの勉強をしようとしていますので、可能な解決方法を説明できれば助かります。

+0

一つの問題は、あなたがこれを割り当てることですが: 'winE.edit = selVehicle;' ** AFTER **あなたは 'winE.ShowDialogを(呼び出し); '。 'ShowDialog'はメソッドの実行をブロックしています。 (=モーダルウィンドウ)。つまり、 'winE'ダイアログを閉じると' winE.edit'が割り当てられます。ウィンドウを開く前にそれを割り当てたいと思うかもしれません。それ以外の場合は、ウィンドウが表示されているときに 'winE.edit'がNULLになります。 –

+0

ありがとう、私は今変更しましたので、ここでコードを更新します! – Kevin

答えて

1

もうすぐです。 設定する必要があるのは、ビークルのインスタンスになる2番目のウィンドウのDataContextです。これにより、Vehicleクラスのプロパティを使用してすべてのプロパティを編集できます。

は、そのクラスの車両は が動作し、このためをINotifyPropertyChangedの継承する必要のあるメモしておいてください、そして、あなたが車のプロパティに値を設定し NotifyPropertyChanged毎回を使用する必要があります。

ここMVVMパターンのいくつかの指針:私が気づい

http://www.codeproject.com/Articles/100175/Model-View-ViewModel-MVVM-Explained

+0

私はちょっと読まなければならないが、私はそれが正しい道に私を持っていると思う。私は受け入れられた答えとしてマークします私はそれを働かせたら、あなたの助けてくれてありがとう! – Kevin

+0

問題ありません。 MVVMのトリックは、各クラスがどのように変更したUIを通知するかを理解することです。その "ユーレカの瞬間"を得ると、残りは滑らかなセーリングですが、それはあなたにいくつかの試みが必要です(少なくとも私のために、hehe) –

関連する問題