65.9K
CodeProject 正在变化。 阅读更多。
Home

如何在 WPF 应用程序中消耗 Web 服务?

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.33/5 (12投票s)

2009 年 7 月 21 日

CPOL

2分钟阅读

viewsIcon

84815

本文解释了如何在 WPF Windows 应用程序中使用 Web 服务。它需要将 WPF 控件绑定到来自 Web 服务的数据。

引言

本文解释了如何在 WPF Windows 应用程序中使用 Web 服务。它需要将 WPF 控件绑定到来自 Web 服务的数据。

参与绑定过程的主要对象是 DataContext。 它作为 WPF Window 和大多数 WPF Framework 元素的 Dependency Property 提供。数据上下文是一个概念,它允许元素从其父元素继承有关用于绑定的数据源的信息,以及绑定的其他特性,例如路径。数据上下文可以直接设置为公共语言运行时 (CLR) 对象,绑定将评估为该对象的属性。或者,您可以将数据上下文设置为 DataSourceProvider 对象。此 Dependency Property 继承属性值。 如果有子元素没有通过局部值或样式建立的其他 DataContext 值,则属性系统将将该值设置为最近父元素的 DataContext 值,该父元素分配了此值。

创建 Web 服务

为了演示本文的目的,我们必须首先创建一个名为“MyWebService”的 ASP.NET Web 服务项目,并向该项目添加一个自定义类 WebContent。此类具有一个字符串属性 GreetingMessage 和一个字段 Names,一个字符串数组。

public class WebContent
{
    string greet;
    public string GreetingString
    {
        get
        {
            return greet;
        }
        set
        {
            greet = value;
        }
    }
    public string[] Names;
}

为方便起见,创建一个 Web 服务方法,该方法设置属性的值并返回此自定义类型的对象。

这是 Web 服务定义的代码

public class Service1 : System.Web.Services.WebService
{

    [WebMethod]
    public WebContent CreateObject()
    {
        WebContent wc = new WebContent();
        wc.GreetingString = "Hello World";
        wc.Names = new string[5] {"Bala", "Murali", 
           "Balaji", "Krish", "Chris" };
        return wc;
    }
}

构建 Web 服务项目并进行测试运行以执行该方法。

创建一个使用 Web 服务的 WPF Window

现在,要在 WPF 应用程序中使用上面创建的 Web 服务,创建一个新的 WPF window 项目,并在窗体上添加几个 TextBlockListBox 控件。要调用 Web 服务,请从“项目”菜单添加一个服务引用,并在显示的对话框中提供 URL (https:///MyWebService/service1.asmx)。

在 WPF window 的 OnLoad 事件处理程序中为 Web 服务引用创建一个代理,并如下调用 CreateObject 方法

void OnLoad(object sender, RoutedEventArgs e)
{
    WebReference.Service1SoapClient proxy = 
                 new WebReference.Service1SoapClient();
    this.DataContext = proxy.CreateObject();
}

CreateObject 方法的输出是 WebContent 类型,并设置为 Window 对象的 DataContext。一旦我们这样做,该类型的所有可访问属性都可用于绑定到窗口中的不同元素。

现在,使用绑定到属性修改 XAML 代码,如下所示

<TextBlock Grid.Column="0" Grid.Row="0" 
  FontWeight="Bold" Text="Greeting Message:"/>
<TextBlock Grid.Column="1" Grid.Row="0" 
  FontWeight="Bold" Text="{Binding Path=GreetingString}"  Foreground="Blue" />
<TextBlock Grid.Column="0" Grid.Row="1" 
  FontWeight="Bold" Text="List of Names: "/>
<ListBox  Grid.Column="1" Grid.Row="1" Margin="0,3,0,0" 
  ItemsSource="{Binding Path=Names}"  Foreground="Blue" />

构建 WPF window 项目并按 F5 运行它。

结论

在 WPF window 应用程序中创建和使用了一个 Web 服务。 DataContext 属性可以分配给 Web 服务方法返回的对象的类型。 这样,任何类型的属性都可以使用 Web 服务方法绑定到适当的 WPF 元素。

© . All rights reserved.