Предпочитаемый метод для привязки в 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:


        
    

Ответы на вопрос(2)

Ваш ответ на вопрос