ViewModel'imi ComboBox'ımla bağlamaya çalışıyorum.WPF Bağlama ComboBox ViewModel'e
class ViewModel
{
public ViewModel()
{
this.Car= "VW";
}
public string Car{ get; set; }
}
ben gibi Window_Load içinde DataContext olarak bu ViewModel ayarlayın:: Benim xaml Sonra
private void Window_Loaded(object sender, RoutedEventArgs e)
{
this.DataContext = new CarModel();
}
, bu ViewModel benim ComboBox bağlamak için bunu böyle tanımlanan ViewModel sınıf var. benim ComboBox varsayılan olarak seçilmiş gibi "VW" göstermek istiyorum: Ben varsayılan değer açılan kutu için "VW" (bir kez seçilen seti nasıl
- :
<ComboBox Name="cbCar" SelectedItem="{Binding Car, UpdateSourceTrigger=PropertyChanged}"> <ComboBoxItem Tag="Mazda">Mazda</ComboBoxItem> <ComboBoxItem Tag="VW">VW</ComboBoxItem> <ComboBoxItem Tag="Audi">Audi</ComboBoxItem> </ComboBox>
ben 2 soru var form yükler, açılan kutuda "VW" göstermelidir).
- Yukarıdaki gibi ComboBoxItems'i xaml olarak ayarlamak yerine, onu ViewModel'de nasıl ayarlayabilirim ve sonra bunları ComboBox'ta yüklerim?
sayesinde
GÜNCELLEME: Şimdiye kadar, bu uygulamaya yönetmek ama ViewModel c-tor aşağıdaki gibi hata alıyorum:
namespace MyData
{
class ViewModel
{
public ViewModel()
{
this.Make = "";
this.Year = 1;
this.DefaultCar = "VW"; //this is where I get error 'No string allowed'
}
public IEnumerable<Car> Cars
{
get
{
var cars = new Car[] { new Car{Model="Mazda"}, new Car{Model="VW"}, new Car{Model="Audi"} };
DefaultCar = cars.FirstOrDefault(car => car.Model == "VW");
}
}
public string Make { get; set; }
public int Year { get; set; }
public Car DefaultCar { get; set; }
}
class Car
{
public string Model { get; set; }
}
}
Tamam Yeni güncelleme, Marka ve Yıl özellikleri, ViewModel'de değil, Araba sınıfında kullanılmalıdır. DefaultCar bir dizeye değil, bir arabelleğe atanmalı ve ViewModel yapıcınızdan kaldırılmalıdır. –
@ E-Bat ViewModel CLASS'ın sadece IEnumerable Otomobilleri tutması gerektiğini ve bunun dışındaki her şeyin Car CLASS'a taşınması gerektiğini mi söylüyorsunuz? Ya da sadece ViewModel C-TOR'dan çıkarmalıyım? Ve bu durumda bir aracın örneğine DefaultCar nasıl atanır? Yukarıdaki ifadeyi kullanarak atanmamış mı? Değişikliği göstermek mümkün mü lütfen? –
pixel
dbnex14, Bu durumda ViewModel sadece Otomobil ve DefaultCar özelliklerini içermelidir. Otomobilleri veri mağazanızdan aldığınız anda DefaultCar atanabilir. Görünümünüz yüklendiğinde ve bağlantılarını çözmeyi denediğinde, Cars özelliği Görünümünüzden sorgulanır (ComboBox'tan ItemsSource özelliği tarafından tetiklenir). Sonra bu anda listeyi döndürmeden önce DefaultCar'ı atayabilirsiniz. Cevabımı görün feryat. –