public MainWindow()
{
InitializeComponent();
// DataContextChanged += OnDataContextChanged;
DataContext = new MainViewModel();
MainViewModel? wnd = DataContext as MainViewModel;
wnd?.SendStartCamera += OnMessageReceived;
}
private async void OnMessageReceived(string msg)
{
_cts = new CancellationTokenSource();
await Task.Run(() => CameraLoop(_cts.Token));
}
internal class MainViewModel
{
public ICommand StartCameraCommand { get; }
public event Action<string>? SendStartCamera;
public MainViewModel()
{
StartCameraCommand = new RelayCommand(_ => StartCamera(), _ => true);
}
private void StartCamera()
{
Console.WriteLine("ok");
SendStartCamera?.Invoke("Hello from ViewModel!");
}
}
public MainWindow()
{
InitializeComponent();
DataContextChanged += OnDataContextChanged;
DataContext = new MainViewModel();
}
private void OnDataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
{
if (e.OldValue is MainViewModel oldVm)
oldVm.SendStartCamera -= OnMessageReceived;
if (e.NewValue is MainViewModel newVm)
newVm.SendStartCamera += OnMessageReceived;
}