将JSON序列化数据绑定到视图中的XAML

时间:2015-02-10 19:09:21

标签: c# xaml mvvm windows-phone-8.1 win-universal-app

所以基本上这是一个应用程序,我可以从Google电子表格中获取数据,以及它的经典(excel)表格。我做了OAuth并获取了数据,现在我无法弄清楚如何将它绑定到我的MainView.xaml ......

我想将它绑定为普通表(因为有10列和40行)。我浏览了调试器,获取了表,存储了数据,我只是不知道如何将它绑定到XAML。我试图在MVVM架构中尝试这个,所以结合,尝试,看看HUB模板,但没有好......这是一些代码...

MODEL - Table.cs:

[DataContract]
public class Table
{
    [DataMember(Name="id")]
    public string Id { get; set; }
    [DataMember(Name="day")]
    public int Day { get; set; }
    [DataMember(Name="month")]
    public int Month { get; set; }
    [DataMember(Name="year")]
    public int Year { get; set; }
    [DataMember(Name="People")]
    public string People { get; set; }
}

DATASOURCE:

//[DataContract]
//public class TablePayload
//{
//    [DataMember(Name="tables")]
//    public List<Table> Table { get; private set; }
//}
// I used the payload in a simmillar app, dunno if I actually need it here
public sealed class DataSource
{
    private static DataSource _dataSource = new DataSource();

    private ObservableCollection<Table> _table = new ObservableCollection<Table>();

    public ObservableCollection<Table> Table
    {
        get { return this._table; }
    }

    public static async Task<IEnumerable<Table>> GetTablesAsync()
    {
        await _dataSource.GetDataAsync();
        return _dataSource.Table;
    }

    public static async Task<Table> GetTableAsync(string id)
    {
        await _dataSource.GetDataAsync();
        var matches = _dataSource.Table.Where((table) => table.Id.Equals(id));
        if (matches.Count() == 1) return matches.First();
        return null;
    }

    private async Task GetDataAsync()
    {
        //if (this._table.Count != 0) return;

        this.Table.Clear();
        var jsonObject = await DownloadSpreadsheet.GetJson();
        for (int row = 0; row < jsonObject["rows"].Count(); row++)
        {

            Table table = new Table();
            table.Day = int.Parse(jsonObject["rows"][row]["c"][0]["v"].ToString());
            table.Month = int.Parse(jsonObject["rows"][row]["c"][1]["v"].ToString());
            table.Year = int.Parse(jsonObject["rows"][row]["c"][2]["v"].ToString());
            table.People = jsonObject["rows"][row]["c"][4]["v"].ToString();

            this.Table.Add(table);
        }

    }

}

VIEWMODEL:MainView.xaml.cs:

public sealed partial class MainView : Page
{

    //public ObservableCollection<SpreadSheetModel> table = new ObservableCollection<SpreadSheetModel>();
    private ObservableDictionary defaultViewModel = new ObservableDictionary();
    public MainView()
    {
        this.InitializeComponent();
    }

    public ObservableDictionary DefaultViewModel
    {
        get { return this.defaultViewModel; }
    }



    async private void btrRefreshData_Click(object sender, RoutedEventArgs e)
    {


        var tableData = await DataSource.GetTablesAsync();
        this.DefaultViewModel["Table"] = tableData;

    }
}

和VIEW:MainView.xaml

<Page
x:Class="Degordian_Workload_2.Views.MainView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Degordian_Workload_2"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:Model="using:Degordian_Workload_2.Services.Model"
mc:Ignorable="d" 
DataContext="{Binding DefaultViewModel, RelativeSource={RelativeSource Self}}">

<Page.Resources>
<DataTemplate x:Key="StandardTripleLineItemTemplate">
    <Grid Margin="0,0,0,0">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>


        <StackPanel Grid.Column="1" Margin="15,20,0,0">
            <TextBlock Text="{Binding Month}" FontFamily="Global User Interface" TextLineBounds="Tight" Margin="0,0,0,10" />
            <TextBlock Text="{Binding People}"  TextWrapping="Wrap" FontFamily="Global User Interface" />


        </StackPanel>
    </Grid>
</DataTemplate>
</Page.Resources>
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <TextBlock 
        HorizontalAlignment="Center"
        VerticalAlignment="Center" Margin="120,67,1142,687">
        <Run Text="You are in Main View."/>
    </TextBlock>


    <Button x:Name="btrRefreshData"  
        Margin="1237,52,0,678"
        Content="Refresh" Click="btrRefreshData_Click"  />


</Grid>

enter image description here 代码也在github上:https://github.com/lklancir/apps

如果你能给我一个例子或指导它,我会感激不尽! Thx提前。

0 个答案:

没有答案