我试过搜索信息没有任何运气。
我有几个 Classes
,例如 CarManufacturerModel
& CarModelModel
.
在 CarManufacturerModel
我创建了一些汽车品牌,“奥迪、奔驰、宝马”,并在 CarModelModel
我创建了制造商的不同模型。
我想创建 CarModelModel
的对象在 CarManufacturerModel
这样我就可以在对象声明中添加该制造商的以下模型。例如,一个制造商可以有多个型号、1 系列、2 系列等。
这是汽车模型模型
public class CarModelModel
{
//public string CarModel { get; set; }
public ObservableCollection<string> CarModels { get; set; }
public CarModelModel(/*string carModel*/ObservableCollection<string>carModels)
{
//CarModel = carModel;
CarModels = carModels;
}
public static CarModelModel Create(/*string carModel*/ObservableCollection<string>carModels)
=> new CarModelModel(/*carModel*/carModels);
}
这是 CarManufacturerModel - 注意一些代码被注释掉了
public class CarManufacturerModel
{
public string CarManufacturer { get; set; }
public CarModelModel CarModel { get; set; }
//public ObservableCollection<CarModelModel> CarModels { get; set; }
private CarManufacturerModel(string carManufacturer, /*ObservableCollection<CarModelModel>carModels*/CarModelModel carModel)
{
CarManufacturer = carManufacturer;
//CarModels = carModels;
CarModel = carModel;
}
public static CarManufacturerModel Create(string carManufacturer, /*ObservableCollection<CarModelModel>carModels*/CarModelModel carModel)
=> new CarManufacturerModel(carManufacturer, carModel);
}
这是我声明对象的类 CarManufacturerViewModel
public class CarManufacturerViewModel : ViewModelBase, ICarManufacturerViewModel
{
private string _carYear;
//private CarModelModel _selectedCarModel;
private CarManufacturerModel _carManufacturer;
//private ObservableCollection<CarModelModel> _carModels;
private ObservableCollection<CarManufacturerModel> _carManufacturers;
[DesignOnly(true)]
public CarManufacturerViewModel()
{
CarManufacturers = new ObservableCollection<CarManufacturerModel>
{
CarManufacturerModel.Create("Audi", CarModelModel.Create("1", "2")) <---------------------
};
//SelectedCarManufacturer = CarManufacturers.First();
}
public ObservableCollection<CarManufacturerModel> CarManufacturers
{
get => _carManufacturers;
set
{
SetProperty(ref _carManufacturers, value);
}
}
public CarManufacturerModel SelectedCarManufacturer
{
get => _carManufacturer;
set
{
SetProperty(ref _carManufacturer, value);
//LoadSelectedCar();
}
}
我收到错误消息“方法 'create' 有 1 个参数,但使用 2 个参数调用..
我做错了什么,允许我在同一个对象声明中向 1 个制造商添加多个模型?
更新
public CarManufacturerViewModel()
{
CarManufacturers = new ObservableCollection<CarManufacturerModel>
{
CarManufacturerModel.Create("Audi", CarModelModel.Create(new string[]{"A1","A2","A3","A4","A5"})),
CarManufacturerModel.Create("Mercedes", CarModelModel.Create(new string[]{"A-Class", "B-Class", "C-Class", "E-Class", "S-Class"})),
CarManufacturerModel.Create("BMW", CarModelModel.Create(new string[]{"1-Serie", "2-Serie", "3-Serie", "4-Serie", "5-Serie"})),
CarManufacturerModel.Create("Volkswagen", CarModelModel.Create(new string[]{ "Golf", "Passat", "Arteon", "T-Cross","Up!"})),
CarManufacturerModel.Create("Volvo", CarModelModel.Create(new string[]{"V60","V70","XC60","XC90","S90"}))
};
//SelectedCarManufacturer = CarManufacturers.First();
}
我现在尝试在我的 ListView 中使用它,但它只显示 string[]array
<ListView Grid.Row="1"
Grid.Column="0"
Margin="0"
ItemsSource="{Binding CarManufacturers}"
SelectedItem="{Binding SelectedCarModel, Mode=TwoWay}">
<ListView.ItemContainerStyle>
<Style BasedOn="{StaticResource ListViewItemBase}"
TargetType="{x:Type ListViewItem}"></Style>
</ListView.ItemContainerStyle>
<ListView.ItemTemplate>
<DataTemplate>
<Grid Margin="0">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Style="{StaticResource ResourceKey=ComboBoxItemTextBlock}"
Text="{Binding CarModel.CarModelList}"/>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
CarModelModel 现在看起来像这样。
public class CarModelModel
{
public string[] CarModelList { get; set; }
public CarModelModel(string[]carModelList)
{
CarModelList = carModelList;
}
public static CarModelModel Create(string[]carModelList)
=> new CarModelModel(carModelList);
}
最佳答案
您的 CarCarModel.Create
方法:
public static CarModelModel Create(ObservableCollection<string> carModels)
需要
ObservableCollection<string>
作为其单一参数。你试图这样称呼它:
CarModelModel.Create("1", "2")
也就是说,您试图通过两个
string
参数。但是,它需要 ObservableCollection<string>
, 所以你需要给它一个 ObservableCollection<string>
:CarModelModel.Create(new ObservableCollection<string>() { "1", "2" });
我会质疑您是否要使用
ObservableCollection<string>
完全在这里:您通常只在 ViewModel 中使用它们,并且只有当您将它们绑定(bind)到 UI 时,您才会添加和删除元素(以及在某些 UI 中显示的添加和删除的内容)元素)。如果您在此处使用字符串数组:
public static CarModelModel Create(string[] carModels)
那么您可以将其声明为
params
大批:public static CarModelModel Create(params string[] carModels)
这意味着您可以将其称为:
CarModelModel.Create("1", "2");
编译器会将其转换为为您创建新数组的调用:
CarModelModel.Create(new string[] { "1", "2" });
另外,我不认为你的
Create
方法添加任何东西:只需使用普通的构造函数。
关于C# 方法有 1 个参数,但使用 2 个参数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60092608/