Как я могу получить имя пользователя с идентификатором пользователя в общем списке wpf C#?

Я программирую клиентское приложение WPF. У меня есть api отдыха, клиент WPF общается с этим. Я сделал комбобокс в wpf, привязка данных в порядке.

Разметка XAML:

<ComboBox Name="usernameBox" HorizontalAlignment="Left" 
          Margin="127,33,0,0" VerticalAlignment="Top" Width="152" Height="24" 
          ItemsSource="{Binding UserList}" DisplayMemberPath="Username"/>

Это работает нормально. Но у меня есть один общий список UserlistЯ связываю это для выпадающего списка. Я хочу, чтобы для имени пользователя был комбобокс, я могу получить переменную с идентификатором пользователя.

Модель \ Пользовательский класс:

namespace Desktop.Model
{
    public class Users
    {
        public int UserId { get; set; }
        public string Username { get; set; }
        public string Password { get; set; }
        public string Fullname { get; set; }
        public int Authority { get; set; }
    }
}

Класс ViewModel/UserViewModel:

using GalaSoft.MvvmLight;
using Desktop.Model;
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Net.Http.Formatting;
using Newtonsoft.Json;

namespace Desktop.ViewModel
{
    public class UserViewModel : ViewModelBase
    {
        public List<Users> UserList { get; set; }

        public UserViewModel()
        {
            UserList = new List<Users>();
            string url = "http://localhost:1234/api/users";
            var json = new WebClient().DownloadString(url);
            UserList = JsonConvert.DeserializeObject<List<Users>>(json);
        }
    }
}

Получить API / пользователи JSON:

[
  {
    "UserID": 1,
    "Username": "admin",
    "Password": "password",
    "Fullname": "teszt",
    "Authority": 1
  }
]

Извините за мой плохой английский. Пожалуйста, помогите мне! Спасибо.

2 ответа

Решение

Мне удалось решить.

Разметка XAML:

<ComboBox x:Name="usernameBox" HorizontalAlignment="Left" Margin="127,33,0,0" VerticalAlignment="Top" Width="152" ItemsSource="{Binding UserList}" SelectedValuePath="UserId" DisplayMemberPath="Username"/>

Codebehind:

var id = usernameBox.SelectedValue;

Работает нормально!

Используя MVVM, как вы, вы можете добавить в свой XAML:

SelectedItem="{Binding SelectedUser}"

в вашей ViewModel:

private Users _user;
public Users SelectedUser
{
    get
    {
        return _user;
    }
    set
    {
        if (_user == value)
            return;
        _user = value;
        OnPropertyChanged(nameof(SelectedUser));
    }
}

Готово, используйте собственность SelectedUser чтобы выбратьUsers"в вашем ComboBox

Другие вопросы по тегам