2016-03-21 28 views
0

Bir gözlemlenebilir koleksiyonu "araçlar" var c wpf, sınıf "araba" "bisiklet" veya "van aiteditboxCollection içindeki nesneyi liste kutusunda seçerek ve düzenlemek için yeni pencere açarak düzenleyin. içeren araç #

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); 

Bu araçlar sergilenmektedir araç Sınıfı", her bir devralınan" bir listbox "lbxVehicles"

lbxVehicles.ItemsSource = vehicles; 

Ben liste görüntülenen araçlardan biri seçebilmek için gerekiyor ve bir düzenleme butonu tıklandığında yeni bir pencere açmak ve ayrıntıları düzenlemek ve bir düğmeye tıkladığınızda yeni pencerede gözlemlenebilir koleksiyondaki seçili nesne düzenlenecektir.Ne yapmaya çalışıyordum? İlk penceresi:

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(); 
       } 
      } 

sonra pencere 2:

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

Bu denedim sadece ne olduğunu ama yanlış olduğunu eminim. Herhangi bir yardım çok takdir ve ben mümkün o kadar büyük bir olasılıkla açıklamak mümkün olabileceğini öğrenmek için çalışıyorum çünkü

+0

Bir sorun, bu atama şudur: 'winE.edit = selVehicle;' ** SONRA ** Eğer 'winE.ShowDialog (call); '. 'ShowDialog', yöntemin yürütülmesini engelliyor. (= Modal Penceresi). Yani, "winE" iletişim kutusunu kapattığınızda "winE.edit" atanır. Pencereyi açmadan önce onu atamak isteyebilirsiniz. Penceresi –

+0

gösterdiğinde 'winE.edit' null olacak Neyse, bunun için teşekkürler, şimdi değiştirdim, böylece kodu burada güncelleyelim! – Kevin

cevap

1

Sen yakınsın. Ayarlamanız gereken şey, ikinci pencerenizin DataContext'in aracın örneği olması. Bu şekilde, tüm özellikleri Araç sınıfının özelliklerini kullanarak düzenleyebilirsiniz.

o sınıf Araç çalışması için INotifyPropertyChanged devralmak için ihtiyacı not edin ve size Araç özellikte bir değer SET NotifyPropertyChanged her şey kullanmak gerekir.

burada MVVM desen üzerinde bazı rehberlik: Fark ettim

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

+0

Biraz okumalıyım ama bence doğru yolda. Kabul edilen cevap olarak işaretleyeceğim Eğer işe alırsam, yardımınız için teşekkür ederim! – Kevin

+0

Sorun değil. MVVM ile yapılan hile, her bir sınıfın değiştiği kullanıcı arayüzünü "nasıl" bildirdiğinin anlaşılmasıdır. Bu "eureka-an" ı aldığınızda, geri kalanı pürüzsüz bir yelken, ama sana birkaç girişimde bulunacak (en azından benim için, hehe) –