2017-04-13 24 views
0

私はWPFを初めて使用しており、MVVMパターンを使用しています。WPFデータとUserControlのバインド

私はグリッドを持つWPF UserControlを持っています。グリッドには2つの列があります。最初は目的を選択するためのもので、もう1つは別のUserControlを表示するものです。

私はの.xaml内のユーザーコントロールを表示する方法を知っている:

<local:ViewSecurityCF Grid.Column="1" Grid.Row="0"/> 

しかし、今私は、可能な場合は、別のUserControlでデータバインディングをしたいです。

この時点で私にとって唯一の選択肢は、使用する各UserControlとData Bind 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> 

しかし、私はこのウィンドウを開くと、そのすべてのユーザーコントロールをロードするので、それが遅れて言ったように。それが可能であるならば、私はこれらのいずれかをしたいし、それに異なるユーザーコントロールをバインド:

<local:ViewClientSite Grid.Row="1" Grid.Column="1" Visibility="{Binding ViewClientSiteVisibility}" Width="Auto" Height="Auto" Margin="{Binding UserControlMargin}"/> 
+0

私はあなたが達成したいことを得られませんでした。あなたがやったことと達成したいことを追加してください。 –

答えて

0

をする代わりに、一度にそれらのすべてを作成するのには、ビューモデルをホストするプロパティにバインドされますのContentPresenterを配置することができます。

メインページの下にあるリソースでは、(x:Keyの代わりにDataTypeを使用して)viewmodelごとにDataTemplateを定義し、それぞれが別のUserControlをホストします。

+0

ありがとう、あなたが提供した情報で私を助けたいくつかのリンクがあります。 [リンク1](http://stackoverflow.com/questions/15367115/load-multiple-usercontrols-on-wpf-window)[link2](http://stackoverflow.com/questions/29679847/use-binding-to-グリッド内のユーザ制御制御) – Elmer

関連する問題