TextBox (Y) と Button を持つユーザー コントロールがあり、MainWindow(Y) には別の TextBox があります。ボタンを押すと、メッセージがポップアップ表示され、製品 X*Y が表示されます。
現在、UserControl、元のデータ、および追加したばかりのデータの両方にバインドされているため、XAML を介して別のデータを挿入するだけで同じように表示されます (TextBox.Text がバインドされていると言ったため)。
私が知りたいのは、これを拡張して MainWindow に複数の UserControl を追加する方法を知りたいので、各 UserControl に異なる値を入力してからボタンを押して、各製品の価格を確認することです。
RootViewMode.cs
public class RootViewModel : INotifyPropertyChanged
{
#region Implementation of INotifyPropertyChanged
private double _x;
private double _y;
public double X
{
get { return _x; }
set
{
_x = value;
OnPropertyChanged("X");
}
}
public double Y
{
get { return _y; }
set
{
_y = value;
OnPropertyChanged("Y");
}
}
public double XY
{
get { return _x * _y; }
}
}
UserControl1.xaml
<StackPanel>
<Label Content="Y:" />
<TextBox Text="{Binding Path=Y, UpdateSourceTrigger=PropertyChanged, FallbackValue=1}" Margin="5" />
<Button Content="Press me" Click="OnButtonClick" />
</StackPanel>
UserControl1.xaml.cs
private void OnButtonClick(object sender, RoutedEventArgs e)
{
var viewModel = (RootViewModel)DataContext;
var resultMessage = string.Format("{0} * {1} = {2}", viewModel.X, viewModel.Y, viewModel.XY);
MessageBox.Show(resultMessage, "X * Y");
}
MainWindow.xaml
<StackPanel>
<Label Content="X:" />
<TextBox Text="{Binding Path=X, UpdateSourceTrigger=PropertyChanged}" Margin="5" Height="24" />
<WpfApplication22:UserControl1 Margin="5" />
<WpfApplication22:UserControl1 Margin="5" />
</StackPanel>
もちろん、この方法で UserControl を挿入すると、望ましくない結果が得られます。UserControl ごとに新しい RootViemModel を作成する必要があると思いますが、これは動的に行う必要があります。2 つの UserControl だけではなく、「Create UserControl!」というボタンを使用してそれらを生成する方法が必要です。ありがとう。
(コードを手伝ってくれたsevenateに感謝します)