1

我将从 WCF 天气服务接收到的数据绑定到 silverlight 中的数据网格。我得到了一个 7 天预测的回报。我遇到的问题是返回是一个集合,在这个集合中是温度和降水概率,这是另一个层次。温度有高有低,降水的概率有白天和夜间。

namespace MyProject
{
public partial class MainPage : UserControl
{

    WeatherSoapClient weatherClient = new WeatherSoapClient();

    public MainPage()
    {
        InitializeComponent();

        weatherClient.GetCityWeatherByZIPCompleted += new EventHandler<GetCityWeatherByZIPCompletedEventArgs>(weatherClient_GetCityWeatherByZIPCompleted);
    }

这是我将数据网格的源设置为预测集合的地方。

    void weatherClient_GetCityForecastByZIPCompleted(object sender, GetCityForecastByZIPCompletedEventArgs e)
    {
        this.dataGrid1.ItemsSource = e.Result.ForecastResult;

    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        weatherClient.GetCityForecastByZIPAsync(inputZip.Text);
    }
}
}

我在数据网格中得到的结果如下所示:http: //i.stack.imgur.com/9W67v.jpg

正如您在温度和 POP 下看到的,这不是我想要显示的。作为 C# 的新手,我很难达到我现在的目的。现在有人建议制作一个自定义转换器以深入挖掘。我不确定如何做到这一点。任何帮助将不胜感激。希望我能展示你需要看到的一切。

4

1 回答 1

1

您需要在数据网格上设置AutoGenerateColumnsFalse,然后自己定义列类型(有关如何在 Internet 上执行此操作的大量信息)。

对于前几列,DataGridTextColumn很好。

对于最后两个,您想使用DataGridTemplateColumn. 在DataTemplatefor 列中,您可以放置​​两个 TextBlock,每个绑定到不同的属性。

例如:

<data:DataGrid AutoGenerateColumns="False">
    <data:DataGrid.Columns>

      <data:DataGridTextColumn Header="Date"
                               Binding="{Binding Date}" />

      <data:DataGridTextColumn Header="ID"
                               Binding="{Binding WeatherID}" />

      <data:DataGridTemplateColumn Header="Temperature">
        <data:DataGridTemplateColumn.CellTemplate>
          <DataTemplate>
             <StackPanel>
               <TextBlock Text="{Binding Temperatures.High}" />
               <TextBlock Text="{Binding Temperatures.Low}" />
             </StackPanel>
          </DataTemplate>
        </data:DataGridTemplateColumn.CellTemplate>
      </data:DataGridTemplateColumn>
    </data:DataGrid.Columns>
</data:DataGrid>
于 2012-04-19T01:52:38.297 回答