繁体   English   中英

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

[英]C# Method has 1 parameter but is invoked with 2 arguments

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

我有几个Classes ,例如CarManufacturerModelCarModelModel

CarManufacturerModel我创建了一些汽车品牌,“Audi、mercedes、bmw”,在CarModelModel我创建了制造商的不同模型。

我想在CarManufacturerModel创建一个CarModelModel的对象,以便我可以在对象声明中添加该制造商的以下模型。 例如,一个制造商可以拥有多个型号、1 系列、2 系列等。

这是 CarModelModel

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

我收到错误消息“方法‘创建’有 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 中使用它们,并且只有当你将它们绑定到 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方法不会添加任何内容:只需使用普通构造函数即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM