【问题标题】:WPF Data Binding a UserControlWPF 数据绑定用户控件
【发布时间】: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


【解决方案1】:

您可以放置​​ ContentPresenter 以绑定到将托管 ViewModel 的属性,而不是一次创建所有这些。

在主页面资源下,为每个视图模型定义 DataTemplate(使用 DataType 而不是 x:Key),每个视图模型都将托管另一个 UserControl。

【讨论】:

  • 谢谢,这里有一些链接可以帮助我了解您提供的信息。 link1link2
猜你喜欢
  • 1970-01-01
  • 2012-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-29
相关资源
最近更新 更多