gpt4 book ai didi

c# - WPF 将 ComboBox 绑定(bind)到我的 ViewModel

转载 作者:太空狗 更新时间:2023-10-29 22:15:48 25 4
gpt4 key购买 nike

我正在尝试将我的 ViewModel 绑定(bind)到我的 ComboBox。我有这样定义的 ViewModel 类:

class ViewModel
{
public ViewModel()
{
this.Car= "VW";
}

public string Car{ get; set; }
}

我在 Window_Load 中将此 ViewModel 设置为 DataContext,如下所示:

   private void Window_Loaded(object sender, RoutedEventArgs e)
{
this.DataContext = new CarModel();
}

然后在我的 xaml 中,我这样做是为了将我的 ComboBox 绑定(bind)到这个 ViewModel。我想在我的 ComboBox 中显示默认选择的“VW”:

        <ComboBox Name="cbCar" SelectedItem="{Binding Car, UpdateSourceTrigger=PropertyChanged}">
<ComboBoxItem Tag="Mazda">Mazda</ComboBoxItem>
<ComboBoxItem Tag="VW">VW</ComboBoxItem>
<ComboBoxItem Tag="Audi">Audi</ComboBoxItem>
</ComboBox>

我有两个问题:

  1. 如何将组合框中选择的默认值设置为“VW”(表单加载后,它应该在组合框中显示“VW”)。
  2. 不是像上面那样在 xaml 中设置 ComboBoxItems,而是如何在我的 ViewModel 中设置它,然后将它们加载到 ComboBox 中?

谢谢,

更新:到目前为止,我设法实现了这一点,但在 ViewModel c-tor 中出现如下错误:

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

最佳答案

当您要实现 MVVM 时,如果您开始考虑用对象来表示您的应用程序中的汽车,情况会好很多:

    public class ViewModel
{
public Car SelectedCar{ get; set; }
public ObservableCollection<Car> Cars{
get {
var cars = new ObservableCollection(YOUR_DATA_STORE.Cars.ToList());
SelectedCar = cars.FirstOrDefault(car=>car.Model == "VW");
return cars;
}
}
}

public class Car
{
public string Model {get;set;}
public string Make { get; set; }
public int Year { get; set; }
}

您的 Xaml:

<ComboBox SelectedItem="{Binding SelectedCar}", ItemsSource="{Binding Cars}" 
UpdateSourceTrigger=PropertyChanged}"/>

关于c# - WPF 将 ComboBox 绑定(bind)到我的 ViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34321074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com