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