【发布时间】:2017-04-13 07:35:36
【问题描述】:
我是 WPF 新手,我正在使用 MVVM 模式。
我有一个带有网格的 WPF 用户控件。网格有两列。第一个用于选择目的,第二个用于显示另一个 UserControl。
我知道如何在 .xaml 中显示用户控件:
<local:ViewSecurityCF Grid.Column="1" Grid.Row="0"/>
但现在我想尽可能使用不同的用户控件进行数据绑定。
此时我唯一的选择是为我要使用的每个 UserControl 创建一个标签,并数据绑定它们的 Visibility 属性。
但从编程的角度来看,它会消耗大量内存,因此我正在寻找一种更有效的方法。
任何帮助将不胜感激。
谢谢。
编辑(我目前的解决方案):
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="4*" />
<ColumnDefinition Width="6*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Text="Cellular View" Grid.ColumnSpan="2" Style="{StaticResource UXHeaderTextStyle}"></TextBlock>
<local:ViewBillingLevel Grid.Row="1" Grid.Column="1" Visibility="{Binding BillingLevelVisibility}" Width="Auto" Height="Auto" Margin="{Binding UserControlMargin}"/>
<local:ViewCity Grid.Row="1" Grid.Column="1" Visibility="{Binding ViewCityVisibility}" Width="Auto" Height="Auto" Margin="{Binding UserControlMargin}"/>
<local:ViewClientSite Grid.Row="1" Grid.Column="1" Visibility="{Binding ViewClientSiteVisibility}" Width="Auto" Height="Auto" Margin="{Binding UserControlMargin}"/>
<local:ViewCompany Grid.Row="1" Grid.Column="1" Visibility="{Binding ViewCompanyVisibility}" Width="Auto" Height="Auto" Margin="{Binding UserControlMargin}"/>
<local:ViewCompanyBillingLevel Grid.Row="1" Grid.Column="1" Visibility="{Binding ViewCompanyBillingLevelVisibility}" Width="Auto" Height="Auto" Margin="{Binding UserControlMargin}"/>
<local:ViewCompanyGroup Grid.Row="1" Grid.Column="1" Visibility="{Binding ViewCompanyGroupVisibility}" Width="Auto" Height="Auto" Margin="{Binding UserControlMargin}"/>
<local:ViewContractService Grid.Row="1" Grid.Column="1" Visibility="{Binding ViewContractServiceVisibility}" Width="Auto" Height="Auto" Margin="{Binding UserControlMargin}"/>
<local:ViewDeviceMake Grid.Row="1" Grid.Column="1" Visibility="{Binding ViewDeviceMakeVisibility}" Width="Auto" Height="Auto" Margin="{Binding UserControlMargin}"/>
<local:ViewDeviceModel Grid.Row="1" Grid.Column="1" Visibility="{Binding ViewDeviceModelVisibility}" Width="Auto" Height="Auto" Margin="{Binding UserControlMargin}"/>
<local:ViewPackage Grid.Row="1" Grid.Column="1" Visibility="{Binding ViewPackageVisibility}" Width="Auto" Height="Auto" Margin="{Binding UserControlMargin}"/>
<local:ViewProvince Grid.Row="1" Grid.Column="1" Visibility="{Binding ViewProvinceVisibility}" Width="Auto" Height="Auto" Margin="{Binding UserControlMargin}"/>
<local:ViewServiceProvider Grid.Row="1" Grid.Column="1" Visibility="{Binding ViewServiceProviderVisibility}" Width="Auto" Height="Auto" Margin="{Binding UserControlMargin}"/>
<local:ViewStatus Grid.Row="1" Grid.Column="1" Visibility="{Binding ViewStatusVisibility}" Width="Auto" Height="Auto" Margin="{Binding UserControlMargin}"/>
<local:ViewSuburb Grid.Row="1" Grid.Column="1" Visibility="{Binding ViewSuburbVisibility}" Width="Auto" Height="Auto" Margin="{Binding UserControlMargin}"/>
</Grid>
但是就像我说的,当我打开这个窗口时它会滞后,因为它加载了所有的用户控件。如果可能的话,我想要其中之一并将不同的 UserControls 绑定到它:
<local:ViewClientSite Grid.Row="1" Grid.Column="1" Visibility="{Binding ViewClientSiteVisibility}" Width="Auto" Height="Auto" Margin="{Binding UserControlMargin}"/>
【问题讨论】:
-
我没有得到你想要达到的目标。能否请您添加您所做的以及您想要实现的目标
标签: wpf xaml mvvm data-binding