2017-09-27 16 views
0

私はWPFフレームワークとMVVMでUIを開発しています。レンダリングが完了した後に image of the grid while displaying複数のコントロールを一度に表示

これはUIです:読み込みながら これはグリッドである

image of the grid when rendering is finished

をので、例として、第3列はアクティブではなく、崩壊します。しかし、ユーザーはメインウィンドウのUIから建物全体を見ることができます。 私が持っているすべてのビューは、viewmodelに依存しています。しかし、コントロールも独自のビューモデルを持っていました。 1つのコントロールで情報をまとめると、WPFは情報を取得しています。たとえば、テーブルコントロールなど、コントロール全体を描画します。それはデータを取って、データをグリッドに表示する自作コントロールです。 1つのコントロールなので、グリッド全体がバックグラウンドでロードされ、一度に表示されます。自分のグリッドを作成すると、テーブルコントロールがデータを処理できないため、グリッド内のすべてのコントロールが1つずつ表示され、グリッドがメインウィンドウにゆっくりと表示されます。

<Grid HorizontalAlignment="Left"> 
<Grid.ColumnDefinitions> 
    <ColumnDefinition Width="Auto"/> 
    <ColumnDefinition Width="Auto"/> 
    . 
    . 
    .  
</Grid.ColumnDefinitions> 
<Grid.RowDefinitions> 
    <RowDefinition Height="Auto"/> 
    <RowDefinition Height="Auto"/> 
    . 
    . 
    .  
</Grid.RowDefinitions> 
    <unitControls:Label Grid.Row="1" Grid.Column="0" Text="{Binding xx}"/> 
    <unitControls:Label Grid.Row="1" Grid.Column="1" Text="{Binding xx}"/> 
    <unitControls:Label Grid.Row="1" Grid.Column="2" Text="{Binding xx}"/>  
    . 
    . 
    . 
    <unitControls:Label Grid.Row="7" Grid.Column="7" Text="{Binding xx}"/> 
    <unitControls:Label Grid.Row="7" Grid.Column="8" Text="{Binding xx}"/> 
    <unitControls:Label Grid.Row="7" Grid.Column="9" Text="{Binding xx}"/> 
<Grid> 

コンテンツを一度に1つのビューに表示する方法はありますか?私はviewmodelでディスパッチャを操作しようとしましたが、何も助けませんでした。

答えて

0

このような何かを試してみてください:

XAML

<Window x:Class="Example.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <DockPanel> 
     <Button Content="Collect data" Click="OnCollectData" DockPanel.Dock="Top"/> 
     <ContentControl x:Name="HostControl"/> 
    </DockPanel> 
</Window> 

CS

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    private async void OnCollectData(object sender, RoutedEventArgs e) 
    { 
     var data = await CollectDataAsync(); 
     HostControl.Content = new MyCustomGridControl(data); 
    } 

    private async Task<GridDataHolder> CollectDataAsync() 
    { 
     GridDataHolder result = null; 
     await Task.Run(() => 
     { 
      // Collect the logical data on the thread pool 
      result = GetGridData(); 
     }); 
     return result; 
    } 
} 

あなたはグリッドにプログレスバーでHostControlを入れて、にプログレスバーのVisibilityプロパティで遊ぶことができますユーザーエクスペリエンスを向上させます。

関連する問題