我想将国家/地区的名称从列表的一个字段中取出并将它们放到comboBox中:
public TravelAgencyResponse GetInformation(TravelAgencyRequest request)
{
TravelAgencyResponse response = new TravelAgencyResponse();
// response.Offers = new OfferDto();
response.Offers = new List<DataTransferObjects.OfferDto>();
response.Offers.Add(new DataTransferObjects.OfferDto()
{
IdOffer = 0,
KindOfAccommodation = "Hotel",
Country = "Spain",
});
response.Offers.Add(new DataTransferObjects.OfferDto()
{
IdOffer = 1,
KindOfAccommodation = "Hotel",
Country = "Italy",
});
response.ThisOffer = (from offer in response.Offers
where offer.Country == request.Country
select offer).FirstOrDefault();
return response;
}
我认为我可以在不使用 FirstOrDefault()的情况下使用LINQ,但在这种情况下我不能这样做。
private void button1_Click(object sender, EventArgs e)
{
Uri baseAddr = new Uri("http://localhost:1232/TravelAgencyService/SimpleTravelAgencyService/");
ChannelFactory<ITravelAgencyService> factory = new ChannelFactory<ITravelAgencyService>(new WSHttpBinding(),
new EndpointAddress(baseAddr));
ITravelAgencyService proxy = factory.CreateChannel();
var response = proxy.GetInformation(
new TravelAgencyService.Messages.TravelAgencyRequest()
{
Country = textBox1.Text
});
comboBox1.Items.Add(response.ThisOffer.Country);
listBox1.Items.Add(response.ThisOffer.Country);
}
我尝试将这些信息放在ComboBox中:
comboBox1.Items.Add(response.ThisOffer.Country);
我只给出了第一个国家或类似的国家:
comboBox1.Items.Add(response);
我什么都没得到。
我在WCF的第一步!请理解!
答案 0 :(得分:1)
因此,如果我正确理解您的问题,您希望将所有response.Offers
Country
属性中包含的所有国家/地区填入ComboBox,是否正确?
由于您提到自己是WPF新手,我将跳过关于MVVM and DataBinding的部分,并向您展示如何使用您现有的方式完成。
首先你需要&#34;提取&#34;来自Offers
的所有国家/地区,最好只有一次,并按字母顺序排序。
List<string> countries = response.Offers
.Select(o => o.Country) // We only need the "Country" of the offer
.Distinct() // Every country only once
.OrderBy(c => c) // Sort by name
.ToList(); // make a List<string> out of it
我建议不要手动添加项目,而是建议您通过设置DataSource
属性来一次性分配所有项目。
comboBox1.DataSource= countries;
您需要确保Items
为空,手动添加的项目和DataSource
不能很好地协同工作。
如果您想预先选择某个国家/地区(例如来自ThisOffer
的国家/地区),您可以设置ComboBox的SelectedItem
属性:
comboBox1.SelectedItem = response.ThisOffer.Country;