Извините за недопонимание в первый раз.Я создал небольшой образец.Вот код XAML:
<Window x:Class="S4SO.ContainerBinding.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="520" Width="425">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="80" />
<RowDefinition Height="400" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="400" />
</Grid.ColumnDefinitions>
<ContentControl Content="{Binding ContentContent}" Grid.Row="1" Height="400" Width="400" />
<StackPanel Orientation="Horizontal">
<Button Content="Use button" Command="{Binding UseButton}" />
<Button Content="Use Textbox" Command="{Binding UseTextbox}" />
</StackPanel>
</Grid>
</Window>
Окно привязано к модели представления. Для простоты я взял MVVMLight за основу:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Input;
using System.Windows.Controls;
using System.Windows;
using GalaSoft.MvvmLight.Command;
using GalaSoft.MvvmLight;
namespace S4SO.ContainerBinding {
public class ViewModel : ViewModelBase {
private object _ContentContent;
public object ContentContent {
get { return _ContentContent; }
set {
if ( _ContentContent.GetType() == value.GetType() )
return;
_ContentContent = value;
RaisePropertyChanged( "ContentContent" );
}
}
public ICommand UseButton { get; set; }
public void CommandUseButton () {
ContentContent = new Button() {
Content = "A button",
Width = 400,
Height = 400,
VerticalContentAlignment = VerticalAlignment.Center,
HorizontalContentAlignment = HorizontalAlignment.Center
};
}
public bool CanUseButton () {
return !( _ContentContent is Button );
}
public ICommand UseTextbox { get; set; }
public void CommandUseTextbox () {
ContentContent = new TextBox() {
Text = "Content here",
Width = 400,
Height = 400,
VerticalContentAlignment = VerticalAlignment.Center,
HorizontalContentAlignment = HorizontalAlignment.Center
};
}
public bool CanUseTextbox () {
return !( _ContentContent is TextBox );
}
public ViewModel () {
_ContentContent = new Label() {
Content = "Please choose content!",
Width = 400,
Height = 400,
HorizontalContentAlignment = HorizontalAlignment.Center,
VerticalContentAlignment = VerticalAlignment.Center
};
UseButton = new RelayCommand( () => CommandUseButton(), () => CanUseButton() );
UseTextbox = new RelayCommand( () => CommandUseTextbox(), () => CanUseTextbox() );
}
}
}
Определенно не уровень производства, но он показывает направление инадеюсь, теперь больше, чем вы просили.Я использовал простые элементы управления и не стал связывать эти динамически созданные элементы управления.Связывание с помощью кода не так просто, как синтаксис связывания в XAML.Я оставлю это на ваше усмотрение, если это правильное направление.