【问题标题】:Displaying multiple controls at once一次显示多个控件
【发布时间】:2017-09-27 21:20:48
【问题描述】:

我正在使用 WPF 框架和 MVVM 开发 UI。 这是加载时的网格: image of the grid while displaying

这是渲染完成后的 UI:

image of the grid when rendering is finished

因此,作为示例,第 3 列未处于活动状态并将折叠。但是用户可以在主窗口的 UI 中看到整个建筑。 我得到的每个视图都取决于视图模型。但控件也有自己的视图模型。当我将我的信息放在一个控件中时,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>

有没有办法一次在一个视图中显示全部内容?我试图在视图模型中操纵调度程序,但没有任何帮助。

【问题讨论】:

    标签: c# wpf mvvm rendering


    【解决方案1】:

    试试这样的:

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

    您可以将带有 ProgressBar 的 HostControl 放在 Grid 中,并使用 ProgressBar 的 Visibility 属性来改善用户体验。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-26
      • 1970-01-01
      • 1970-01-01
      • 2022-07-21
      • 1970-01-01
      相关资源
      最近更新 更多