あなたの質問にアプローチできる1つの方法は、ユーザーコントロールでEvenHandlerを使用し、mainViewでサブスクライブすることです。ユーザーコントロールの発言ボタンをクリックするたびに、イベントを発生させます。
サンプルを作成しました:
ユーザーコントロールにテキストボックスとボタンがあります
これは分離コードです。
public partial class UserControl1 : UserControl
{
public event EventHandler<EventArgs> CreateNewUserControl = null;
public static int InstanceCount = 0;
public UserControl1()
{
InitializeComponent();
Loaded += new RoutedEventHandler(UserControl1_Loaded);
}
void UserControl1_Loaded(object sender, RoutedEventArgs e)
{
InstanceCount++;
txtControl.Text = "Control - " + InstanceCount;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
var handler = CreateNewUserControl;
if (handler != null)
handler.Invoke(sender,e);
}
}
メインビューで:
Xaml:
<StackPanel x:Name="UserControlTest" Orientation="Vertical" VerticalAlignment="Top" HorizontalAlignment="Right" Grid.Column="1" Grid.RowSpan="2" ScrollViewer.VerticalScrollBarVisibility="Auto" MaxHeight="800" Margin="30">
<RadChartProject:UserControl1 x:Name="UserControl1"/>
</StackPanel>
xaml.cs:
public MainPage()
{
InitializeComponent();
UserControl1.CreateNewUserControl += UserControl1_CreateNewUserControl;
}
void UserControl1_CreateNewUserControl(object sender, EventArgs e)
{
if(UserControlTest != null)
{
var control = new UserControl1();
control.CreateNewUserControl += UserControl1_CreateNewUserControl;
UserControlTest.Children.Add(control);
}
}