Делаю браузер на основе 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}" />
Виртуальный выделенный сервер (VDS) становится отличным выбором
Нужно настройти меню под 2 режима смартфона landscape и portrait, вот примерно что должно получиться
Добрый день, для практики программирования решил поработать с какой-нибудь торговой платформой, может кто-нибудь может посоветовать апи...
Нужно провести десериализацию с фала в новый массив, как осуществить? Сериализую так: