0

2列のリストボックスを持つwpfフォームがあります。

このコードを使用して、リストボックスに値を追加します。

playersOnlineList.Items.Add(new { Username = username, Status = "Lobby" });

このコードを使用して、リストボックスから値を削除します。

playersOnlineList.Items.Remove(new { Username = username, Status = "Lobby" });

私の質問は、ユーザー名 = x の「ステータス」の値をどのように更新するのですか?

ありがとう

4

3 に答える 3

0

あなたはおそらくこれに沿って何かをしなければならないでしょう:

    for (int i = 0; i < playersOnlineList.Items.Count; i++) {
        if (playersOnlineList.Items[i].Username == x) {
            Player p = playersOnlineList.Items[i];
            p.Status = newStatus;
            playersOnlineList.Items[i] = p;
        }
    }

私があなたの質問を誤解していない限り、これはあなたの問題を解決するはずです。この状況では、再割り当てがうまく機能するはずです。

于 2013-02-21T12:51:32.517 に答える
0

問題は、匿名型を使用していることです。Itemsリストボックスのコレクションによって返される項目は、として返されobjectます。アイテムのプロパティにアクセスするには、それらをキャストする必要がありますが、型が匿名であるためキャストできません。アイテムの明示的なクラスを作成します。

class UserStatus
{
    public string Username { get; set; }
    public string Status { get; set; }

    public override bool Equals(object obj)
    {
        UserStatus other = obj as UserStatus;
        return other != null && other.Username == Username && other.Status == Status;
    }

    public override int GetHashCode()
    {
        unchecked {
            int hash = 17;
            hash = hash * 31 + Username == null ? 0 : Username.GetHashCode();
            hash = hash * 31 + Status == null ? 0 : Status.GetHashCode();
            return hash;
        }
    }
}

これで、アイテムのインデックスを検索できます

for (int i = 0; i < playersOnlineList.Items.Count; i++) {
    var userStatus = (UserStatus)playersOnlineList.Items[i];
    if (userStatus.Username == x) {
        userStatus.Status = newStatus;
        break;
    }
}
于 2013-02-21T13:02:49.287 に答える
0

削除したい既存のオブジェクトを渡さずに、新しいオブジェクトを作成しているため、2 行目は機能しません。Username プロパティと Status プロパティを持つクラスを作成し、次にListBoxusing を設定する必要がありItemsSourceます。

            User user = new User(); //your custom class
            user.Username = username;
            user.Status = "Lobby";
            List<User> source = new List<User>();
            source.Add(user);
            //add more users here

            listBox.ItemsSource = source;
            //removing a user
            source.Remove(user);//if you have the instance
            //if not, find user by username and remove it
            User userToRemove = null;
            foreach (User user in source) {
                if (user.Username == "myUserName") { 
                    userToRemove = user;
                    break;
                }
            }
            if(userToRemove != null)
                source.Remove(userToRemove);

ユーザーを編集するには、インスタンスがある場合はプロパティを変更します。インスタンスがない場合は、ユーザー名に基づいて見つけて変更します。

于 2013-02-21T12:59:26.037 に答える