ingenieur3d 发表于 2021-2-7 17:44:16

Newby:用字典填充的WPF表单组合框string,SmallLayerObject & gt

我来自VBA,编程能力超群,但毫无挫折感。我被困住了,所以我寻求帮助
我有一个WPF表单,其中有一个填充了层名称的组合框。在我的设计中,层的选择是可选的,因此项是一条消息“
”。然后,从第1项开始,组合框将填充图层名称
Transaction trans=DrawingDatabase.TransactionManager.StartTransaction()
SortedList
LayersSorted=new-SortedList
()
LayerTable:lyrTbl=trans.GetObject(DrawingDatabase.LayerTableId,OpenMode.ForRead)作为LayerTable
foreach(ObjectId:lyritbl中的lyrId)
{
lyrTblRec=trans。GetObject(lyrId,OpenMode.ForRead)作为LayerTableRecord
lyrObj=new smallayerbj
{
BaseId=lyrId,
isfreeze=lyrTblRec.isfreezed,
Name=lyrTblRec.Name
}
LayersSorted.Add(lyrTblRec.Name,lyrObj)
}
Dictionary
layerDisct=新字典
{
//defMessage是一个字符串“

{defMessage,新的smallayerbj{Name=null,BaseId=ObjectId.null,isfreeze=false}
}
foreach(KeyValuePair
layerName在layerSorted中)
{
LayerDict.Add(layerName.Key,layerName.Value)
}
返回LayerDict
它仍然需要关注,但它可以工作。从长远来看,这将使我能够不费吹灰之力地扩展SmallayerRobj
现在我的数据用这个XAML语法绑定:ItemsSource=“{Binding}”DisplayMemberPath=“Key”SelectedValuePath=“Value.BaseId”。我不确定SelectedValuePath=“Value.BaseId”是否正常工作以及它应该做什么,但DisplayMemberPath=“Key”正常工作,并且组合框中填充了LayerName
现在我有了这个返回值
var lyr=win.cboLayers.SelectedItem
而lyr变量实际上是一个泛型变量。KeyValuePair
我的问题是,我不知道如何读取存储在值部分中的ObjectId,该部分是一个包含三项的SmallLayerObj。。TryGetValue?使用索引器?我没有线索,甚至智能感知也不提供帮助。我够不着…
**** Hidden Message *****

gile 发表于 2021-2-8 01:38:24

嗨,
看起来你让事情变得更复杂

ingenieur3d 发表于 2021-2-8 03:00:30

嗨,Gile,在我实现了你的简化之后,我会给你一个大大的感谢。首先,我的第一个问题。此处的    var lyrId = win . cbolayers . selecteditem . value . baseid;。
不起作用,它说“对象”不包含“值”的定义,是不是我把它弄得太复杂了,以至于混淆了Value属性?我认为我需要转换为KeyValuePair以获得访问权限。    var VarSelLyr = win . cbooutputl . selecteditem;。

Dictionary DictLyr = null。
KeyValuePair KVPLyr。
SmallLayerObj LyrObj = null。

if (VarSelLyr是字典 == true)。
{。
DictLyr = (Dictionary)VarSelLyr。
//下一个失败:IntelliSense写入。
//字典不包含“value”的定义,。
if (DictLyr,值为SmallLayerObj == true)。
ly robj =(SmallLayerObj)KVPLyr,价值;。
}。

if (VarSelLyr是KeyValuePair == true)。
{。
KVPLyr =(key value pair )VarSelLyr。
//这行得通。
if (KVPLyr,值为SmallLayerObj == true)。
ly robj =(SmallLayerObj)KVPLyr,价值;。
}。

acDoc,editor . write message(" Name value = "+lyr obj,name . ToString());。
奇怪!但是你给了我一个更好的解决方案,谢谢!!。

ingenieur3d 发表于 2021-2-8 03:50:55

这样,层的列表是无序的。你是怎么解决的?
PS:我同意,不需要留言。

gile 发表于 2021-2-8 05:11:42

试试这个:



var lyrId =((key value pair
)win . cbolayers . selecteditem). value . baseid;

ingenieur3d 发表于 2021-2-8 05:35:29

嗨!
@gile。谢谢!同时我implem

gile 发表于 2021-2-8 05:48:32

强IEnumerable
扩展方法

ingenieur3d 发表于 2021-2-8 06:18:11

感谢您的帮助!
这将是一段复杂的友谊。
页: [1]
查看完整版本: Newby:用字典填充的WPF表单组合框string,SmallLayerObject & gt