C# 方法有 1 个参数,但使用 2 个参数调用

标签 c# object mvvm

我试过搜索信息没有任何运气。

我有几个 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/

相关文章:

c# - sql server 和 c# 中的输出参数问题

c# - 使用 C# 的 HTTP 请求

javascript - 使用 lodash 按键对数组中的对象进行排序

c# - 如何使用 MVVM 更新 Datagrid?

mvvm - 在 Caliburn Bootstrapper Configure() 中显示 MessageBox

c# - 在图像为 16bpp 灰度时从位图中获取彩色图像

c# - 使用 LINQ to SQL 进行分页

javascript - 如何使用 Javascript 在单个对象中映射多个对象数据?

javascript - 我不清楚JavaScript函数/对象的结构

c# - 如何将数据传递给 wpf mvvm 对话框?