2016-09-23 63 views
-2

我在寫UWP應用程序。我下載JSON,反序列化並綁定它。如何製作加載屏幕?

這裏是代碼:

public async void Down() 
{ 
    WritingToTable wrt = new WritingToTable(); 
    wrt.Writing(); 

    RestAPI rest = new RestAPI("http://simplegames.com.ua/wp-json/wc/v1/", 
     "ck_9d64c027d2c5f81b8bed3342eeccc6d337be813d", "cs_60697b1e6cbdeb8d62d19e0765e339f8e3334754"); 
    WCObject wc = new WCObject(rest); 
    //Get all products 
    var orders = await wc.GetOrders(new Dictionary<string, string>() 
    { 
     {"per_page", "100"} 
    }); 
    string products = orders.ToFormattedJsonString(); 

    List<RootObject> rootObjectData = JsonConvert.DeserializeObject<List<RootObject>>(products); 

    foreach (RootObject root in rootObjectData) 
    { 
     string date = root.date_created; 
     string name = root.billing.first_name; 
     Orders = new ObservableCollection<RootObject>(rootObjectData) 
     { 
      new RootObject {date_created = date} 
     }; 
     OrdersGridView.ItemsSource = Orders; 
    } 
} 

我怎樣才能使加載屏幕?例如,當數據下載和綁定應用程序顯示加載屏幕,當所有完成的應用程序顯示數據。

+1

請格式化您的問題。它包含許多格式問題,並使用戶在閱讀本文時感到乏味。 – Eldho

+1

沒有人會在他們正確的思想中花費任何時間,試圖閱讀那些不規則格式的代碼塊。如果您正在尋找幫助,請考慮應用一致的格式。 – IInspectable

回答

4

有很多方法可以在UWP中創建加載屏幕。這一切都取決於你想要達到的目標。 從你的問題我明白,你的目標是阻止用戶與數據加載時的應用程序交互,並顯示一個用戶界面,通知用戶有關加載操作。

最簡單的方法是在xaml中定義一個網格。像這樣的東西

<Grid 
     Background="{ThemeResource ABrushResource}" 
     Canvas.ZIndex="1" 
     Visibility="{Binding IsLoading, Converter = {StaticResource BooleanToVisibilityConverter}"> 
     <!--anything else you want to show--> 
     <ProgressBar 
      IsIndeterminate="True" 
      VerticalAlignment="Center"    
      /> 
    </Grid> 

確保Grid可見時覆蓋整個頁面。如有必要,使用Canvas.ZIndex將其放在任何其他內容之上。

您可以通過ViewModel中的布爾屬性和BooleanToVisibilityConverter來控制Grid的可見性。您可以自己編寫轉換器或find it online

因此,當您啓動對您服務的呼叫時,您可以執行此操作。

try{ 
IsLoading = true; 
var orders = await wc.GetOrders(new Dictionary<string, string>() { 
       { "per_page", "100" }}); 
} 

catch (Exception ex) 
{ 
    // handle any exceptions, e.g. network exceptions 
} 
finally 
{ 
    IsLoading = false; 
}