Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c语言中的嵌套列表#_C#_List_Class - Fatal编程技术网

C# c语言中的嵌套列表#

C# c语言中的嵌套列表#,c#,list,class,C#,List,Class,我在很多未知领域工作,因为我试图在这个项目中正确地遵循MVVM,以及正确的结构。我根据将来json文档的布局方式创建了以下类: public class SkinList { public class Coord { public string x { get; set; } public string y { get; set; } } public class L

我在很多未知领域工作,因为我试图在这个项目中正确地遵循MVVM,以及正确的结构。我根据将来json文档的布局方式创建了以下类:

    public class SkinList
    {
        public class Coord
        {
            public string x { get; set; }
            public string y { get; set; }
        }

        public class Location
        {
            public string ID { get; set; }
            public string Name { get; set; }
            public List<Coord> Coords { get; set; }
            public string CodeNumber { get; set; }
            public string Description { get; set; }
        }

        public class Skin
        {
            public string ID { get; set; }
            public string Name { get; set; }
            public List<Location> Locations { get; set; }
        }

        public class RootObject
        {
            public List<Skin> Skins { get; set; }
        }
    }
公共类皮肤列表
{
公共类合作社
{
公共字符串x{get;set;}
公共字符串y{get;set;}
}
公共类位置
{
公共字符串ID{get;set;}
公共字符串名称{get;set;}
公共列表坐标{get;set;}
公共字符串代码{get;set;}
公共字符串说明{get;set;}
}
公共级皮肤
{
公共字符串ID{get;set;}
公共字符串名称{get;set;}
公共列表位置{get;set;}
}
公共类根对象
{
公共列表外观{get;set;}
}
}
加载时,当前页面将创建一个新的皮肤(皮肤)对象。它允许用户单击图像上的某个点。生成该点后,我希望它创建一个新的位置对象(点)。我希望屏幕上有多个不同的框来绑定该对象的各种属性。我的下一步将是弄清楚整个INotify的事情,但有一部分我被卡住了。我似乎不知道如何将Location对象附加到Skin对象中的Locations列表。我知道我缺少的只是一些逻辑,可能是非常直截了当的

以下是我正在使用的代码:

{
    /// <summary>
    /// Interaction logic for ManikinEditor.xaml
    /// </summary>
    public partial class ManikinEditor : Page
    {
        public List<SkinList.Skin> skin = new List<SkinList.Skin>();

        private Ellipse elip = new Ellipse();
        private Point anchorPoint;
        private int Radius = 3;
        public ManikinEditor()
        {
            string guid = System.Guid.NewGuid().ToString();
            SkinList.Skin _skin = new SkinList.Skin();
            _skin.ID = guid;
            skin.Add(_skin);
            InitializeComponent();


        }
        private void Image_MouseLeftButtonDown_1(object sender, MouseButtonEventArgs e)
        {
            anchorPoint = e.MouseDevice.GetPosition(Cnv);
            //public List<SkinList.Skin
            //           SkinList.Location point = new SkinList.Location();
 //           List<SkinList.List> location = new List<SkinList.Locations>();
            SkinList.Location point = new SkinList.Location();
            string pointguid = System.Guid.NewGuid().ToString();
            point.ID = pointguid;
            Path test = new Path
            {
                Stroke = Brushes.Red,
                StrokeThickness = 1,
                Fill = Brushes.Black,
                Data = new EllipseGeometry { Center = anchorPoint, RadiusX = Radius, RadiusY = Radius }
            };

            Cnv.Children.Add(test);


        }

    }
}
{
/// 
///ManikinEditor.xaml的交互逻辑
/// 
公共部分类操纵器编辑器:第页
{
公共列表皮肤=新列表();
私有椭圆elip=新椭圆();
专用点主播点;
私有整数半径=3;
公共操纵器编辑器()
{
字符串guid=System.guid.NewGuid().ToString();
SkinList.Skin_Skin=新SkinList.Skin();
_skin.ID=guid;
皮肤。添加(_皮肤);
初始化组件();
}
私有无效图像_MouseLeftButtonDown_1(对象发送器,MouseButtonEventArgs e)
{
anchorPoint=e.MouseDevice.GetPosition(Cnv);

//public List有点回答了我自己的问题。这只是我将List对象视为类对象的一个例子(不确定我的措辞是否正确,我是一个相当新的对象)。以下是迄今为止似乎有效的更新代码:

公共部分类操纵器编辑器:第页
{
public SkinList.Skin=新SkinList.Skin();
列表位置=新列表();
私有椭圆elip=新椭圆();
专用点主播点;
私有整数半径=3;
公共操纵器编辑器()
{
字符串guid=System.guid.NewGuid().ToString();
skin.ID=guid;
初始化组件();
}
私有无效图像_MouseLeftButtonDown_1(对象发送器,MouseButtonEventArgs e)
{
anchorPoint=e.MouseDevice.GetPosition(Cnv);
//公共列表好的。
MVVM在第一次尝试时可能有点令人畏惧,所以这里有一些提示

您创建的类实际上就是数据模型

您应该尝试只将支持视图所需的代码放在它的代码隐藏中

程序逻辑,例如创建模型类实例并设置它们,应该在ViewModel中执行,它顺便实现了INotifyPropertyChanged内容

顺便说一句,在需要单独的模型和ViewModel类时,通常会出现一个灰色区域

您的视图应该绑定到数据和ICommand实例的ViewModel属性,以执行操作,例如触发某些代码以运行json序列化

您的SkinList ViewModel应该有一个可观察的皮肤集合

就我个人而言,我会将我的类分开,这样它们就不会彼此嵌入,而是将每个类放在自己的文件中

每个类都应该能够创建、删除并在列表中包含一个选定的类实例——这将简化XAML中的绑定。 e、 g

不要害怕实现ViewModels的ObservableCollections或将ViewModels放置在ViewModels中-问问自己这个问题:您想自己查看位置、蒙皮还是坐标

如果要在一个用户视图中显示多个外观和位置,最好在视图中显示多个视图或在视图中显示多个自定义用户控件

例如,您是希望在视图中显示多层皮肤,还是仅显示一层皮肤

编辑

将鼠标单击坐标传递回ViewModel的最简单方法是使用隐藏的代码捕获并传递它(您可以通过XAML中的绑定来实现,这稍微复杂一点)

ViewModel是视图的(页面)绑定上下文(可以在XAML或代码隐藏中设置)。在代码隐藏中,它通常通过构造函数传入

然后,您将使用“Image\u MouseLeftButtonDown\u 1”处理程序引用该命令,并调用一个将坐标作为命令参数传递的命令


使用ICommands和绑定有助于将UI和程序代码解耦,同时允许它们在不同的线程上运行,以保持UI的响应性。

你的问题是什么?你能运行代码吗?如果不能,会出现什么错误?如果是,会发生什么,你希望它做什么不同的事情?嗨,代码。我的问题是关于h现在我可以让它按照描述的方式工作。无法编译,因为我不知道我应该怎么做才能让它工作。我对这些领域都是新手,不幸的是,新冠病毒都取消了我要上的CE课程