繁体   English   中英

如何使用MVVM正确绑定文本框

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM