我正在使用WPF框架和MVVM开发UI。 这是加载时的网格: image of the grid while displaying
这是渲染完成后的UI:
image of the grid when rendering is finished
因此,作为示例,第3列不活动并将崩溃。但是用户可以在主窗口中看到整个建筑物的UI。 我得到的每个视图都取决于viewmodel。而且控件也有自己的视图模型。当我在一个控件中一起获取我的信息时,WPF将获取信息并绘制整个控件,例如我的tablecontrol。这是一种自制控件,即获取数据并在网格中显示数据。因为它是一个控件,所以整个网格在后台加载并立即显示。当我创建自己的网格时,由于我的tablecontrol无法处理数据,网格中的每个控件都会一个接一个地显示,网格会慢慢显示在主窗口上。
<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中操纵调度程序,但没有任何帮助。
答案 0 :(得分: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与ProgressBar放在网格中,并使用ProgressBar的Visibility属性来改善用户体验。