Предпочитаемый метод для привязки в MVVM, шаблон данных в файле ресурсов или просто DataContext в самом представлении?
Это меня озадачило, поскольку я ДУМАЛ, что я посмотрел на все, но я должен что-то упустить. Я отказался от традиционного паттерна MVVM из журнала MSDN:
http://msdn.microsoft.com/en-us/magazine/dd419663.aspx
во время обучения MVVM. Однако я обычно копирую большую часть кода, а затем заменяю его по мере необходимости, но сегодня я хотел создать что-то с нуля и понял, что в этом может быть что-то большее, чем я думал. MVVM, по-видимому, не работает с привязками, когда я использовал словарь ресурсов, но работает с datacontext напрямую. Этот вопрос в конечном итоге хочет найти другие разработчики предложили использовать связывание, которое они находят
Резюме вопроса таково: почемуDataTemplate» в словаре ресурсов, кажется, не работа, показанная ниже, но прямойDataContext» метод делает с целью сразу для привязки?
Это потому, что я делаю смесь кода с представлениями настроек в коде позади. Или потенциально из-за чего-то еще. Похоже, моя собственность и этоРеализация s установлена правильно в viewmodel, если я установил 'DataContext» прямо в представлениис XAML, но почему нет в словаре ресурсов? Я думал, что преимущество этого метода в том, что вы можете установить несколько отношений одновременно. Мне любопытно, нужно ли делать какие-то другие настройки, чтобы заставить его работать. Любопытно, что в основном примере метода MVVM они используют шаблоны данных, но кажется, что их настройка - это больше, чем я делаю, чтобы получить их 'привязок работать.
ЧТО НЕ РАБОТАЕТ МНЕ:
Я попытался сделать что-то очень простое в главном окне xaml, оставив часть своего кода, чтобы сделать его еще проще:
Главное окно XAML:
Код главного окна за:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.WindowState = WindowState.Maximized;
}
private void mnuDataBoundSeriesMVVMCharting_OnClick(object sender, RoutedEventArgs e)
{
View.DataBoundMVVMChart c = new DataBoundMVVMChart();
dockchildren.Children.Clear();
dockchildren.Children.Add(c);
}
}
}
Ресурсный словарь:
Представление для DataBoundMVVMChart.xaml:
ViewModel для привязки к представлению выше:
namespace WPFTesting12_2.ViewModel
{
class DataBoundMVVMChartViewModel : INotifyPropertyChanged
{
private string _HelloString;
public string HelloString
{
get { return _HelloString; }
set
{
_HelloString = value;
RaisePropertyChanged("HelloString");
}
}
public DataBoundMVVMChartViewModel()
{
HelloString = "Hello there from the ViewModel";
}
public event PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
}
}
}
Хорошо, теперь привязка не будет отображаться, но все же появятся ресурсы цвета. Поэтому я подумал, что сделал что-то не так, но код сразу же получит свойство. Так что давайте's двигаться дальше:
ЧТО РАБОТАЕТ:
Магически, если я просто добавлю эти четыре строки в представление:
Добавьте это к декларациям вUserControl» сегмент сверху:
xmlns:local="clr-namespace:WPFTesting12_2.ViewModel"
Затем установите ссылку на UserControl 's DataContext: