WPF ユーザインタフェースコントロールとフォーム間の呼び出し方法
WPFでは、ユーザーコントロールとフォーム間は、以下の方法で呼び出しができます。
- ユーザーコントロールにてイベントを定義:
- partial class MyUserControl : UserControl
{
public event EventHandler MyEvent;public MyUserControl()
{
InitializeComponent();
}private void Button_Click(object sender, RoutedEventArgs e)
{
MyEvent?.Invoke(this, EventArgs.Empty);
}
} - ウィンドウ内のイベント用のサブスクリプション
- public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
myUserControl.MyEvent += MyEventHandler;
}private void MyEventHandler(object sender, EventArgs e)
{
// ユーザーコントロールのイベント処理
}
} - コントロール内で公開メソッドとして定義する方法:
- public partial class MyUserControl : UserControl
{
public MyUserControl()
{
InitializeComponent();
}public void DoSomething()
{
// 何らかの操作を実行
}
} - フォームでメソッドを呼び出す:
- public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}private void Button_Click(object sender, RoutedEventArgs e)
{
myUserControl.何か処理をする();
}
} - ユーザコントロールにて依存関係プロパティを設定することで、フォームから同プロパティへのデータバインディングを設定することができます。プロパティが変更されたら、フォームにて最新の値を取得して処理することができます。
- public partial class MyUserControl : UserControl
{
public static readonly DependencyProperty MyPropertyProperty =
DependencyProperty.Register(“MyProperty”, typeof(string), typeof(MyUserControl), new PropertyMetadata(default(string)));public string MyProperty
{
get { return (string)GetValue(MyPropertyProperty); }
set { SetValue(MyPropertyProperty, value); }
}public MyUserControl()
{
InitializeComponent();
}
} - ウィンドウ内でデータバインディングを行なう。
- フォームにデータソースを設定し、データ変更を処理する:
- public partial class MainWindow : Window, INotifyPropertyChanged
{
string myPropertyInMainWindow;
public string MyPropertyInMainWindow
{
get => myPropertyInMainWindow;
set
{
myPropertyInMainWindow = value;
OnPropertyChanged(nameof(MyPropertyInMainWindow));
// プロパティ変更の処理
}
}public MainWindow()
{
InitializeComponent();
DataContext = this;
}public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
ユーザーコントロールとフォーム間の呼び出しによく用いられる方法をいくつか示しましたので、実際のニーズに合わせて適切な方法をお選びください。