【问题标题】:Filling Combobox with observable list which consumed from wcf service使用从 wcf 服务消耗的可观察列表填充组合框
【发布时间】:2014-03-04 12:02:01
【问题描述】:

我是 WPF 的初学者。我正在尝试用从 wcf 服务检索到的可观察集合填充组合框

xml代码:

<ComboBox x:Name="cmbclass" ItemsSource="{Binding ClassList}" VerticalAlignment="Top" DisplayMemberPath="ClassName" SelectedValuePath="ClassID"/>

消费服务:

ServiceReference1.Service1Client ClassList = new ServiceReference1.Service1Client();
ObservableCollection<ClassDO> Classlist = new ObservableCollection<ClassDO>();
Classlist = (ObservableCollection<ClassDO>)ClassList.GetClassList();
cmbclass.ItemsSource = Classlist;
cmbclass.DisplayMemberPath = "ClassID";
cmbclass.SelectedValuePath = "CLassName";

我遇到以下错误,谁能帮帮我?

错误 1
'SchoolManagementSystem.ServiceReference1.ClassDO[]' System.Collections.ObjectModel.ObservableCollection' D:\Dotnet\Projects\WPF\WindowsPhoneApps\SchoolManagementSystem\SchoolManagementSystem\MainWindow.xaml.cs 37 23 SchoolManagementSystem无法转换类型

任何帮助将不胜感激。

【问题讨论】:

  • @mehow S.P 杀死所有编辑 :)
  • 天哪,这将很快成为一个维基:P
  • 我说这不会编译是不是我错了,因为您的 serviceclient 实例与您的 observablecollection 具有相同的名称
  • 第一步,更改两个ClassList变量之一的名称。

标签: c# wpf wcf xaml combobox


【解决方案1】:

请看一下这段代码。本例使用MVVM design pattern

视图模型

public class MainViewModel
{
    public MainViewModel()
    {
        ServiceReference1.Service1Client client = new erviceReference1.Service1Client();
        Classlist = new ObservableCollection<ClassDO>(client.GetClassList());
    }

    public ObservableCollection<ClassDO> ClassList { get; set; }
}

观点

<ComboBox ItemsSource="{Binding ClassList}" VerticalAlignment="Top" DisplayMemberPath="ClassName" SelectedValuePath="ClassID"/>

并在视图的代码隐藏中设置数据上下文

this.DataContext = new MainViewModel();

在这个例子中,我假设 GetClassList() 一个 ClassDO 的 IEnumerable 返回

【讨论】:

    【解决方案2】:

    我知道了如何用 WCF 消耗的可观察集合填充组合框 Xaml 代码:

     <ComboBox x:Name="Cmbclass" ItemsSource="{Binding Classlist}" VerticalAlignment="Center" DisplayMemberPath="ClassName" SelectedValuePath="ClassID" Loaded="CmbClassListLoaded"></ComboBox> 
    

    消费服务:

    public void GetClassList()
    {
    ServiceReference1.Service1Client ServiceClient = new ServiceReference1.Service1Client();
    ObservableCollection<ClassDO> Classlist = ServiceClient.GetClassList();
    Cmbclass.ItemsSource = Classlist;
    Cmbclass.DisplayMemberPath = "classname";
    //Cmbclass.se = "ClassID";
    Cmbclass.SelectedValuePath = "classid";
    
    }
    

    现在在 windowload 方法中调用 Getclasslist

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多