Как дождаться завершения привязки к DependencyProperty

194
03 ноября 2017, 08:12

Делаю браузер на основе 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}" />
READ ALSO
Как создать адаптивниый дизайн в Unity3D

Как создать адаптивниый дизайн в Unity3D

Нужно настройти меню под 2 режима смартфона landscape и portrait, вот примерно что должно получиться

215
Forex api в .Net

Forex api в .Net

Добрый день, для практики программирования решил поработать с какой-нибудь торговой платформой, может кто-нибудь может посоветовать апи...

239
Собственный стиль Expander WPF

Собственный стиль Expander WPF

Подскажите как создать expander примерно такого стиля:

369
Десериализация массива C#

Десериализация массива C#

Нужно провести десериализацию с фала в новый массив, как осуществить? Сериализую так:

282