You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UWP项目中如何为已存在的Room对象设置Projector属性

如何直接修改UWP项目中已存在Room对象的Projector属性

嘿,我明白你的问题了——你现在用Rooms.Insert(1, new Room{ Projector = Visibility.Collapsed });的方式会创建一个全新的Room实例,而不是修改列表里已有的那个对象。要直接操作已存在的Room,核心是先定位到目标实例,再直接给属性赋值,下面分两种场景给你解决方案:

场景1:在创建Room对象时就设置Projector属性(对应你的补充代码逻辑)

看你提供的补充代码,当前逻辑是先插一个空的Room,再添加完整的Room,这明显逻辑错位了。正确的做法是先创建完整的Room实例,在遍历属性的时候直接修改这个实例的Projector,最后再加入列表:

foreach (var room in data) 
{
    // 先初始化当前Room的所有基础属性
    var currentRoom = new Room 
    {
        RoomID = room.id,
        RoomName = room.name,
        FrontImage = Img1,
        Seats = room.seats,
        Note = "Lorem ipsum dolor sit amet, co",
        // 先给Projector一个默认值,比如Visible
        Projector = Visibility.Visible
    };

    // 遍历房间属性,找到目标属性后修改Projector
    foreach (var attri in room.roomAttributes) 
    {
        if (attri.id == 1) 
        {
            currentRoom.Projector = Visibility.Collapsed;
            // 找到后可以跳出循环,节省性能
            break;
        }
    }

    // 把配置好的Room添加到列表
    Rooms.Add(currentRoom);
}

这样你就不会创建多余的Room对象,而是直接在同一个实例上修改属性。

场景2:修改Rooms列表中已存在的Room对象

如果你的需求是列表里已经有这个Room了,之后要修改它的Projector,那你需要通过唯一标识(比如RoomID)找到对应的实例,再赋值:

// 假设你要修改RoomID为"your-target-room-id"的对象
var targetRoom = Rooms.FirstOrDefault(r => r.RoomID == "your-target-room-id");
if (targetRoom != null)
{
    // 直接修改属性
    targetRoom.Projector = Visibility.Collapsed;
}

这里用FirstOrDefault是为了避免找不到对象时触发空引用异常,一定要先判断targetRoom不为null再操作。

为什么你的原代码不对

你原来的代码中,当attriId == 1时插入的是一个只有Projector属性的空Room,之后又添加了一个完整的Room——这会让Rooms列表里出现两个无关的Room实例,完全不是你想要的修改已存在对象的效果。通过先创建实例再修改属性的方式,就能直接操作你需要的那个对象,不会产生冗余数据。

内容的提问来源于stack exchange,提问作者luddep

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:47:41