Я перемещаю свой проект в шаблон MVVM, но привязка не работает. Ниже приведен код моего проекта. Проблема заключается в том, что текстовое поле не обновляется со значением, когда новый объект создается в LRViewModel.cs
, но в окне сообщений появляется всплывающее окно с указанием того, что свойство изменено, но это не обновляет текстовое поле.Как правильно привязать текстовое поле с помощью MVVM
LoginRegister.xaml.cs:
using CSMS_MVVM.ViewModels;
private LrViewModel _lrViewModel;
public LoginRegister()
{
InitializeComponent();
}
private void Page_Loaded_1(object sender, RoutedEventArgs e)
{
_lrViewModel = new LrViewModel();
this.DataContext = _lrViewModel;
}
LoginRegister.xaml
.
.
.
<TextBox Name="regID" Text="{Binding RegId,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Padding="8" Margin="15,110,20,0" VerticalAlignment="Top" BorderBrush="#FFD4F1FF" FontSize="15" ToolTip="Username or Employee ID" FontFamily="Calibri" />
.
.
.
LRViewModel.cs
using CSMS_MVVM.Models;
namespace CSMS_MVVM.ViewModels
{
class LrViewModel
{
public LrModel LrModel { get; set; }
public LrViewModel()
{
LrModel=new LrModel
{
RegId = "Value"
};
}
}
}
LrModel.cs
namespace CSMS_MVVM.Models
{
class LrModel : INotifyPropertyChanged
{
private String _regId;
public String RegId
{
get { return _regId; }
set
{
_regId = value;
OnPropertyChanged(new PropertyChangedEventArgs("RegId"));
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(PropertyChangedEventArgs propertyChangedEventArgs)
{
if (PropertyChanged != null)
PropertyChanged(this, propertyChangedEventArgs);
MessageBox.Show("Here");
}
#endregion
}
}
Вы не должны устанавливать «DataContext» из кода задней части, вы создаете зависимость. Вместо этого установите его в XAML или просто передайте корневой элемент «x: Name» и используйте «Binding.ElementName», чтобы указать там, если «DataContext» уже установлен в другом месте. –
или лучше использовать некоторую фреймворк действительно .. но op сказал mvvm :) – Muds
Вам действительно не нужна фантастическая структура, чтобы заставить MVVM работать на вас, всего несколько простых базовых классов и избегать вредных привычек, таких как установка 'this.DataContext = this; 'в вашем конструкторе элементов управления :-) –