一次显示多个控件



我正在使用WPF框架和MVVM开发一个UI。这是加载时的网格:显示

时网格的图像

这是渲染完成后的UI:

渲染完成时网格的图像

因此,例如,第三列没有活动性并将崩溃。但是用户可以在MainWindow中看到整个建筑物。我拥有的每个视图都取决于ViewModel。而且控件也具有自己的ViewModel。当我将信息一起在一个控件中将我的信息放在一起时,WPF将获取信息并绘制整个控件,例如我的TableControl。这是一种自制的控制,正在获取数据并在网格中显示数据。因为它是一个控件,所以整个网格都加载在后台并立即显示。当我自己制作网格时,因为我的tablecontrol无法处理数据,因此网格中的每个控件都在一个之后显示,并且网格在Mainwindow上慢慢显示。

<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>

有没有办法一次在一个视图中显示整个内容?我试图在ViewModel中操纵调度员,但没有任何帮助。

尝试这样的东西:

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放在网格中,并使用进度键的可见性来改善用户体验。

最新更新