Я ни в коем случае не разработчик C#, но похоже, что Вы должны к URL ЗАКОДИРОВАТЬ свою строку Base64 прежде, чем отправить его как URL.
Это отличный вопрос, на который есть много ответов. Все зависит от того, как вы хотите спроектировать свое приложение. Например, я использую внедрение зависимостей для создания своего IViewModel, который, в свою очередь, создает мой IView, а мой IViewModel запускает IView.SetViewModel (this) в конструкторе.
Другие люди могут пожелать использовать более гибкий метод, установив DataContext в Xaml:
<UserControl.DataContext>
<ns:CrazyViewModel />
</UserControl.DataContext>
Иногда DataContext может подразумеваться, поэтому он устанавливается платформой, как в экземпляре DataTemplate, используемом ItemsControl. Это также довольно часто встречается в настольном WPF, поскольку он поддерживает типизированные шаблоны данных.
Таким образом, на самом деле нет неправильного способа установить DataContext, при условии, что то, что у вас разделяет проблемы, является поддерживаемым, а также легко тестируемым.
У Шона Вильдермута есть отличный пост о том, что идет первым: View или ViewModel: http://wildermuth.com/2009/05/22/Which_came_first_the_View_or_the_Model
Мне нравится и я использую его концепцию брака, где сторонний класс создает и представление, и модель представления, а затем связывает их. У меня это сработало.
I use MVVM a lot in with Prism. In Prism I use Unity for dependecy injection. Therefore I have an interface for every class registered with Unity including the View. The IView interface has a method like this:
void SetViewModel(object viewModel);
The ViewModel calls this method at the end of its constructor, passing itself as a parameter:
public ViewModel(IView view, ...)
{
...
this._view=view;
this._view.SetViewModel(this);
}
In the View.xaml.cs the IView interface is implemented. This will be the only code I add to the codebehind of the view:
public partial class View:UserControl, IView
{
public View()
{
...
}
public SetViewModel(object viewModel)
{
this.DataContext = viewModel;
}
}
Что касается моего собственного использования, ViewModel не знает View, или любой интерфейс в представлении. И большую часть времени View не знает своей ViewModel, даже если это менее важно. ВМ просто передается DataContext.
Это гарантирует, что VM и V останутся полностью независимыми. Ссылки устанавливаются через привязки, команды, поведение, триггеры и так далее. Даже если виртуальная машина часто тесно связана с данным представлением, я стараюсь сделать его как можно более общим, чтобы я мог переключать соответствующее представление и / или адаптировать поведение представления без необходимости обновлять виртуальную машину, кроме случаев, когда архитектурная ссылка между V и M происходит удар!