Делаю браузер на основе CefSharp по примеру из исходников.
Есть VM, которая олицетворяет собой вкладку браузера. В ней идет привязка к свойству WebBrowser, через которое можно выполнять уже различные манипуляции браузером: делать переход по ссылкам, выполнять JS-код на странице и т.д.
ВMainVmлежит коллекция вкладок и метод, создающий новые вкладки.
Проблема в следующем.
Если вызывать метод CreateAndLoadTab в MainVm, то он выкинет исключение NullReferenceException на строке tab.Load();.
Насколько я понимаю, это происходит потому, что сам компонент браузера после создания вкладки не успевает загрузиться и к моменту вызова метода привязка к свойству WebBrowser еще не произошла.
Как правильно дождаться привязки свойства зависимости?
BrowserTabViewModel:
public class BrowserTabViewModel : ViewModelBase
{
private IWpfWebBrowser webBrowser;
public IWpfWebBrowser WebBrowser
{
get { return webBrowser; }
set { Set(ref webBrowser, value); }
}
public void Load()
{
WebBrowser.Load("https://site.com");
}
}
MainVm:
public class MainVm
{
public ObservableCollection<BrowserTabViewModel> Tabs {get;} = new ObservableCollection<BrowserTabViewModel>();
public void CreateAndLoadTab()
{
var tab = new BrowserTabViewModel();
Tabs.Add(tab);
tab.Load(); //Тут будет NullReferenceException
}
}
Xaml:
<Window.Resources>
<DataTemplate DataType="{x:Type viewModel:BrowserTabViewModel}">
<cef:ChromiumWebBrowser WebBrowser="{Binding WebBrowser, Mode=OneWayToSource}" />
<DataTemplate>
</Window.Resources>
<TabControl ItemsSource="{Binding Tabs}" />
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости