首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用MVVM正确绑定我的文本框

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

Stack Overflow用户
提问于 2015-03-18 15:45:18
回答 1查看 54关注 0票数 0

我正在将我的项目移动到MVVM模式中,但是绑定不起作用。下面是我的项目代码。问题是,当在LRViewModel.cs中创建新对象时,textbox不会得到值更新,但是Message会得到弹出,指定属性被更改,但这不会更新Textbox。

LoginRegister.xaml.cs:

代码语言:javascript
复制
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

代码语言:javascript
复制
.
.
.
<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

代码语言:javascript
复制
using CSMS_MVVM.Models;

namespace CSMS_MVVM.ViewModels
{
    class LrViewModel
    {
        public LrModel LrModel { get; set; }

        public LrViewModel()
        {
            LrModel=new LrModel
            {
                RegId = "Value"
            };
        }
    }
}

LrModel.cs

代码语言:javascript
复制
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

    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-18 15:48:42

你应该换个..。

代码语言:javascript
复制
<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将被更新。

-建议--

永远不要在后端DataContext代码中设置C#。相反,(在这个场景中)您可以在XAML中设置DataContext

代码语言:javascript
复制
<Window
    xmlns:ViewModels="clr-namespace:TheNamespaceWhereYourViewModelIs"
    ...
    >
   <Window.DataContext>
      <ViewModels:YourViewModel/>
   </Window.DataContext>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29126487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档