C# c语言中的嵌套列表#
我在很多未知领域工作,因为我试图在这个项目中正确地遵循MVVM,以及正确的结构。我根据将来json文档的布局方式创建了以下类: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
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课程