Модель View ViewModel в WPF с веб-браузером - PullRequest
3 голосов
/ 23 февраля 2009

Я пишу приложение в WPF, используя шаблон MVVM, где я ограничен привязкой к свойствам и командам exclusivley

Однако я хочу использовать элемент управления WebBrowser, который может принимать только HTML-строку для содержимого в качестве параметра для mthod, а не для свойства.

Я собирался создать новый элемент управления, полученный из Webbrowser, который имеет обязательное свойство, но класс элемента управления запечатан. Я пытался создать элемент управления-обертку, но у меня были всевозможные проблемы со свойствами зависимостей, которые, казалось, решали больше проблем, чем я мог себе представить.

Есть ли способ, которым я могу вставить параметр (строку) в метод с MVVM, не прибегая к коду в файлах с выделенным кодом (что является большим нет-нет).

Спасибо

Dean

Ответы [ 3 ]

16 голосов
/ 02 октября 2009

Почему какой-либо код в файлах с выделенным кодом не идет ? Я считаю, что это одно из самых распространенных недоразумений в сообществе MVVM.

MVVM - это не шаблон для устранения кода, стоящего за . Он должен отделять часть вида (внешний вид, анимацию и т. Д.) От логической части (рабочий процесс). Кроме того, вы можете выполнить модульное тестирование логической части.

Я знаю достаточно сценариев, когда вам приходится писать код, потому что привязка данных не является решением для всего. Примеры приложений, которые используют код и все еще выполняют разделение MVVM, можно найти здесь:

WPF Application Framework (WAF)

9 голосов
/ 08 апреля 2009

Я использовал найденное здесь решение

свяжите данные со свойством Source веб-браузера в WPF

НТН

6 голосов
/ 23 февраля 2009

Я не совсем уверен, что понимаю вопрос (вы хотите вызвать метод в WebBrowser, но для этого нужна строка html?).

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

Если вы настроили свой пользовательский интерфейс так, чтобы он включал типичную кнопку адресной строки + кнопку «Перейти», вы захотите использовать обработчик нажатия кнопок для передачи строки в браузер. В качестве альтернативы строка может быть свойством ViewModel, и вы можете легко собрать ее, связав ее со свойством Tag веб-браузера.

Ваш интерфейс будет выглядеть примерно так:

<TextBox x:Name="addressBar" /> <!-- If you use the address bar -->
<Button Content="Go" Click="NavigateButton_Click" />
<WebBrowser x:Name="browser" Tag="{Binding URL}" />  <!-- If you bind to a VM property -->

Ваш код может выглядеть следующим образом:

void NavigateButton_Click(object sender, RoutedEventArgs e)
{
   browser.Navigate(new Uri(addressBar.Text)); // Address Bar
   browser.Navigate(new Uri(browser.Tag.ToString()); // Tag Binding
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...