2013-11-19 2 views
0

Я пытаюсь разобрать некоторые данные json в моем приложении Windows. Для этого я написал несколько кодов. Код не содержит ошибок, но в моем текстовом блоке нет данных. Вот мой XAMLКак показать данные в текстовом блоке после JSON Parsing

<TextBlock Name="acc1" Margin="180, 60, 0, 0" Text="{Binding Accnumber1}" Foreground="White" VerticalAlignment="Top" HorizontalAlignment="Left" FontFamily="Segoe UI" FontSize="22" /> 
           <TextBlock Name="bal1" Margin="180, 90,0, 0" Text="{Binding Availablebalance}" Foreground="White" VerticalAlignment="Top" HorizontalAlignment="Left" FontFamily="Segoe UI" FontSize="22" /> 
           <TextBlock Name="acc2" Margin="180, 140, 0, 0" Text="{Binding Accnumber2}" Foreground="White" VerticalAlignment="Top" HorizontalAlignment="Left" FontFamily="Segoe UI" FontSize="22" /> 
           <TextBlock Name="bal2" Margin="180, 170, 0, 0" Text="{Binding Availablebalance}" Foreground="White" VerticalAlignment="Top" HorizontalAlignment="Left" FontFamily="Segoe UI" FontSize="22" /> 

и это мой файл класса

public MainPage() 
    { 
     InitializeComponent(); 
     CheckForAnimation(); 
     BackKeyPress += OnBackKeyPressed; 

     WebClient webClient = new WebClient(); 
     webClient.DownloadStringCompleted += webClient_DownloadStringCompleted; 
     ProgressBarRequest.Visibility = System.Windows.Visibility.Visible; 
     webClient.DownloadStringAsync(new Uri("http://mobimybank.appspot.com/loginresponse.json")); 
    } 



    void webClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) 
    { 
     try 
     { 
      if (!string.IsNullOrEmpty(e.Result)) 
      { 
       var root1 = JsonConvert.DeserializeObject<RootObject>(e.Result); 
        this.DataContext = root1; 


      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.ToString()); 
     } 
     finally 
     { 
      ProgressBarRequest.Visibility = System.Windows.Visibility.Collapsed; 
     } 

    } 

Это класс RootObject файл

public class Mybank 
{ 
    public string status { get; set; } 
} 

public class Account 
{ 
    public string Accnumber1 { get; set; } 
    public string Availablebalance { get; set; } 
    public string Accnumber2 { get; set; } 
} 

public class Accounts 
{ 
    public List<Account> Account { get; set; } 
} 

public class Loginresponse 
{ 
    public Mybank { get; set; } 
    public Accounts { get; set; } 
} 

public class RootObject 
{ 
    public Loginresponse loginresponse { get; set; } 
} 

Когда я добавил наблюдатель в контексте данных он говорит мне данные были получены. Но данные не отображаются в указанных текстовых блоках. , пожалуйста, скажите мне область, в которой я делаю что-то неправильно, или правильный метод отображения данных.

+0

Я хотел бы использовать DependencyProperties: Text = "{Binding RelativeSource = {RelativeSource AncestorType = {х: Тип ClassReferingTo }, AncestorLevel = 1}, Path = Brand_Name} "..... ваш код позади: создайте объект зависимости (Brand_Name) для ссылки. Вы должны иметь дело с depProps ... google it :) – marcel

+0

Вы привязали TextBloxks к свойствам Brand, Type. Но когда вы меняете ObservableCollection, событие возникает с помощью свойства Results. – Romasz

+0

Во-первых, спасибо за ответ, я бы попросил вас, пожалуйста, немного рассказать, чтобы я мог точно понять мою ошибку. – Dexto

ответ

2

Я получил решение для того же, объявление будет выглядеть следующим образом для одного текстового блока

this.txt1.DataContext= root1.loginresponse.Accounts.Account; 
0

json, который вы пытаетесь проанализировать, содержит массив RootObject. Следовательно, вы должны использовать ListBox в XAML, как это:

 <ListBox x:Name="list"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <StackPanel> 
         <TextBlock Text="{Binding Brand}" /> 
         <TextBlock Text="{Binding Type}" /> 
        </StackPanel> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox>  

При анализе следует использовать тип массива, и задать список по ItemsSource собственности на него, как это:

RootObject[] results = JsonConvert.DeserializeObject<RootObject[]>(json); 
list.ItemsSource = results; 

Надеется, что это помогает. Отметьте как ответ, если это сработает для вас.

+0

Abhishek все еще не работает. – Dexto

+0

@DeepeshDoshi Разбор JSON работает правильно. Я думаю, что теперь проблема связана с привязкой данных. Поскольку вы получаете массив RootObject, вы должны использовать ListBox. Я соответствующим образом изменил ответ. – Abhishek

+0

Ошибка: list - list.itemsource = результаты; Ссылка на объект требуется для нестатического поля, метода или свойства. что означает эта ошибка? – Dexto

Смежные вопросы