[英]How do I correctly bind my Textbox using MVVM
我正在将项目移入MVVM模式,但是绑定不起作用。 以下是我的项目代码。 问题是,当在LRViewModel.cs
创建新对象时,Textbox不会用值更新,但是Message Box会弹出,说明该属性已更改,但是不会更新Textbox。
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
}
}
您应该更改为此。
<TextBox Name="regID" Text="{Binding LrModel.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" />
。
因为您要绑定的属性实际上是模型的属性,而模型是视图模型上的属性,所以您应该绑定到Model.PropertyName ..并在model.Property触发其属性更改时使用。UI将是更新。
-建议-
您永远不要在后端C#代码中设置DataContext
。 相反,(在这种情况下)您可以从XAML内设置DataContext
。
<Window
xmlns:ViewModels="clr-namespace:TheNamespaceWhereYourViewModelIs"
...
>
<Window.DataContext>
<ViewModels:YourViewModel/>
</Window.DataContext>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.