Tag: 亲子

在C#4.0中,有没有办法让一个类的私有成员只能用于特定的其他类?

我们正在创建一个对象层次结构,其中每个项目都有一个其他项目的集合,每个项目也有一个指向其父项目的Parent属性。 很标准的东西。 我们还有一个ItemsCollection类,它inheritance自Collection ,它本身有一个Owner属性,指向该集合所属的项目。 再一次,没有什么有趣的。 当一个项目被添加到ItemsCollection类时,我们希望它自动设置Item的父项(使用集合的Owner属性),当项目被删除时,我们想要清除父项。 这就是事情。 我们只希望Parent setter可用于ItemsCollection ,没有别的。 这样,我们不仅可以知道项目的父项是谁,还可以通过检查Parent的现有值或者让某人随意将其更改为其他内容来确保项目不会添加到多个集合中。 我们知道如何做到的两种方式是: 将setter标记为private,然后将集合定义包含在项本身的范围内。 亲:全面保护。 Con:嵌套类的丑陋代码。 在Item上使用私有ISetParent接口,只有ItemsCollection知道。 亲:更清晰的代码,易于遵循。 Con:从技术上讲,任何知道界面的人都可以投射Item并获得setter。 现在技术上通过反思任何人都可以得到任何东西,但仍然……试图找到最好的方法来做到这一点。 现在我知道C ++中有一个名为Friend的function,或者让你在一个类中指定一个私有成员可用于另一个类的完美场景,但我不知道C#中有任何这样的东西。 在伪代码中(例如,所有属性都更改了通知,为了简洁而删除了这些通知,我只是在这里输入,而不是从代码中复制),我们有… public class Item { public string Name{ get; set; } public Item Parent{ get; private set; } public ItemsCollection ChildItems; public Item() { this.ChildItems = new ItemsCollection (this); } } public class ItemsCollection […]

使用WPF和MVVM模式将值从子窗口传递到父窗口

我有父窗口,其中包含名为“SchoolName”的textBox和一个名为“Lookup school Name”的按钮。 该按钮打开一个包含学校名称列表的子窗口。 现在,当用户从子窗口中选择学校名称,并单击“使用所选学校”按钮。 我需要在父视图的文本框中填充选定的学校。 注意:我已采用Sam和其他人的建议来使这段代码有效。 我更新了我的代码,以便其他人可以简单地使用它。 SelectSchoolView.xaml(父窗口) SchoolNameLookup.xaml(查找学校名称的子窗口) SchoolNameLookupViewModel private string _schoolNames; public string SchoolNames { get { return _schoolNames; } set { _schoolNames= value; OnPropertyChanged(SchoolNames); } } private ICommand _useSelectedSchoolNameCommand; public ICommand UseSelectedSchoolNameCommand{ get { if (_useSelectedSchoolNameCommand== null) _useSelectedSchoolNameCommand= new RelayCommand(a => DoUseSelectedSchollNameItem(), p => true); return _useSelectedSchoolNameCommand; } set { _useSelectedSchoolNameCommand= […]

从儿童表格访问主表格

我有一个简单的问题:我在win-forms / c#中有一个主窗体。 它有一个绑定到数据库的列表框。 单击按钮时,将创建新表单。 当我单击子窗体上的一个按钮时,我想调用主窗体中存在的方法,它更新列表框,或者当子窗体关闭时调用该函数。 这可能吗??

如何使用JSON数据递归填充TreeView

我有一个winforms树视图,我可以自动读取数据,(一个等于key的节点,里面的节点等于value),但是当读取对象类型时,它内部的值不会是对象的子节点节点(对象的键),(也许我无法解释,这是截图和我的方法。) layer0需要在纹理内部,并且缩放需要在显示内部 我的杰森: { “parent”: “builtin/generated”, “textures”: { “layer0”: “mm:items/iron_dust” }, “display”: { “scale”: [ 1.7, 1.7, 1.7 ] } } 我自动检测的方法(实际上不是全部我的) private void Form1_Load(object sender, EventArgs e) { StreamReader reader = new StreamReader(path); string json = reader.ReadToEnd(); reader.Close(); JObject obj = JObject.Parse(json); getAllProperties(obj); } void getAllProperties(JToken children) { TreeNode mainNode = treeView1.Nodes[0]; mainNode.Text = […]