簡體   English   中英

Telerik RadComboBox WPF如何顯示數據庫表中的值列表?

[英]Telerik RadComboBox WPF How to display list of values from database table?

我將MVVM與WPF一起使用,並且在視圖中有一個RadComboBox,需要從數據庫中的County表中填充它。 我的視圖模型如下:

 public class AddClientViewModel : BindableBase
 {
    private Client _client;
    private Circuit _circuit;
    private County _county;
    private State _state;
    private SubscriberSpecialty _subscriberSpecialty;
    private IClientsRepository _repository = new ClientRepository();
    private ICircuitRepository _circuitRepository = new CircuitRepository();
    private ICountyRepository _countyRepository = new CountyRepository();
    private IStateRepository _stateRepository = new StateRepository();
    private ISubscriberSpecialty _subscriberSpecialtyRepository = new SubscriberSpecialtyRepository();

    public AddClientViewModel()
    {
        SaveCommand = new RelayCommand(OnSave);
    }

    public event PropertyChangedEventHandler PropertyChanged = delegate { };

    public Client Client
    {
        get { return _client; }
        set
        {
            if (value != _client)
            {
                _client = value;
                PropertyChanged(this, new  PropertyChangedEventArgs("Client"));
            }
        }
    }

    public Circuit Circuit
    {
        get { return _circuit; }
        set
        {
            if(value != _circuit)
            {
                _circuit = value;
                PropertyChanged(this, new PropertyChangedEventArgs("Circuit"));
            }
        }
    }

    public County County
    {
        get { return _county;}
        set
        {
            if (value != _county)
            {
                _county = value;
                PropertyChanged(this, new PropertyChangedEventArgs("County"));
            }
        }
    }

    public State State
    {
        get { return _state; }
        set
        {
            if (value != _state)
            {
                _state = value;
                PropertyChanged(this, new PropertyChangedEventArgs("State"));
            }
        }
    }

    public SubscriberSpecialty SubscriberSpecialty
    {
        get { return _subscriberSpecialty; }
        set
        {
            if (value != _subscriberSpecialty)
            {
                _subscriberSpecialty = value;
                PropertyChanged(this, new PropertyChangedEventArgs("SubscriberSpecialty"));
            }
        }
    }

    public Guid ClientId { get; set; }
    public Guid CircuitId { get; set; }
    public Guid CountyId { get; set; }
    public Guid StateId { get; set; }
    public Guid SubscriberSpecialtyId { get; set; }
    public ICommand SaveCommand { get; set; }

    public event Action<Client> AddClient = delegate { };

    public async void LoadClient()
    {
        Client = await _repository.GetClientAsync(ClientId);
    }

    public async void LoadCircuit()
    {
        Circuit = await _circuitRepository.GetCircuitAsync(CircuitId);
    }

    public async void LoadCounty()
    {
        County = await _countyRepository.GetCountyAsync(CountyId);
    }

    public async void LoadState()
    {
        State = await _stateRepository.GetStateAsync(StateId);
    }

    public async void LoadSubscriberSpecialty()
    {
        SubscriberSpecialty = await _subscriberSpecialtyRepository.GetSubscriberSpecialtyAsync(SubscriberSpecialtyId);
    }

    private void OnAddClient()
    {
        AddClient(new Client {ClientId = Guid.NewGuid()});
    }

    private async void OnSave()
    {
        try
        {
            Client = await _repository.AddClientAsync(new Client());
        }
        catch (Exception ex)
        {
            MessageBox.Show("A handled exception just occurred: " + ex.Message, "Exception", MessageBoxButton.OK,
                MessageBoxImage.Warning);
        }
    }
}

該界面具有以下內容:

Task<County> GetCountyAsync(Guid countyId);

存儲庫類將接口調用為:

public Task<List<County>> GetCountiesAsync()
{
    return _context.Counties.ToListAsync();
}

然后,我的視圖使用以下語法:

<telerik:RadComboBox x:Name="Countycombo" 
 Grid.Column="1" Grid.Row="3" 
 ItemsSource="{Binding County.CountyName}" 
 DisplayMemberPath="CountyName" Width="120"/>

我在布局中定義了一個DataContext,如下所示:

 <UserControl.DataContext>
    <viewModels:AddClientViewModel />
</UserControl.DataContext>

當我運行應用程序時,RadComboBox不會從County表中獲取值,而County表中已為CountyName加載了多個值。 如何更正以上代碼片段,以確保填充了我的縣名?

更新 :當我從County.CountyName中刪除County時,我收到一條消息,指出Cannot resolve property CountyName in DataContext MySolution.ViewModels.MyViewModel中的LoadCounty或其他部分中還需Cannot resolve property CountyName in DataContext MySolution.ViewModels.MyViewModel哪些其他工作?

我建議以下內容:

引入將包含County對象列表的ViewModel屬性:

private List<County> _counties;
public List<County> Counties
{
    get { return _counties;}
    set
    {
        if (value != _counties)
        {
            _counties = value;
            PropertyChanged(this, new PropertyChangedEventArgs("Counties"));
        }
    }
}

將ComboBox ItemsSource綁定到Counties屬性,並將ComboBox SelectedItem屬性綁定到County屬性。

<telerik:RadComboBox x:Name="Countycombo" 
 Grid.Column="1" Grid.Row="3" 
 ItemsSource="{Binding Counties}" 
 SelectedItem="{Binding County}"
 DisplayMemberPath="CountyName" Width="120"/>

並且您需要一個地方,通過調用GetCountiesAsync的存儲庫來加載縣。 結果應設置為ViewModel Counties屬性。

  public async void LoadCounties()
  {
     Counties = await _countyRepository.GetCountiesAsync();
  }

不知道撥打電話的最佳地點是什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM