【问题标题】:MVVM Light BindingMVVM 光绑定
【发布时间】:2015-02-10 16:54:44
【问题描述】:

我正在处理一个 WPF 项目并使用 MVVM 灯。文本框绑定似乎不起作用。你知道为什么吗?我通过MVVM轻框架中实现的ViewModelBase类使用INotifyPorpertyChanged实现。

我有 2 个文本框用户名和密码...我希望当用户在两个文本字段中输入字符时,链接到这些控件的属性的值会发生变化。

谢谢。

视图模型

  #region Helpers Properties

        private UserBLL UserBLLManager;
        public UserBO User;
        public RelayCommand AddNewUserCommand { get; private set; }
        public RelayCommand TryToLoginCommand { get; private set; }

        #endregion

        public MainViewModel()
        {
            if (UserBLLManager == null)//service
                UserBLLManager = new UserBLL();

            if (User == null)//model
                User = new UserBO();

            AddNewUserCommand = new RelayCommand(() => AddNewUser());
            TryToLoginCommand = new RelayCommand(() => TryToLogin());
        }


            public void AddNewUser()
            {
                 //do stuff

            }

        }
    }

型号

public class UserBO:ObservableObject
        {   
            private string username;
            public string Username
            {
                get { return username; }
                set
                {
                    if (value != username)
                    {
                        username = value;
                        RaisePropertyChanged("Username");
                    }
                }
            }

            private string password;
            public string Password
            {
                get { return password; }
                set
                {
                    if (value != password)
                    {
                        password = value;
                        RaisePropertyChanged("Password");
                    }
                }
            }   
        }

服务定位器

    public class ViewModelLocator
    {

        public ViewModelLocator()
        {
            ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);


            SimpleIoc.Default.Register<MainViewModel>();

        }

        public MainViewModel Main
        {
            get
            {
                return ServiceLocator.Current.GetInstance<MainViewModel>();
            }
        }

        public static void Cleanup()
        {
            // TODO Clear the ViewModels
        }
}

查看

    <Window x:Class="MyCook.MainView"
                DataContext="{Binding Main, Source={StaticResource Locator}}">

            <Grid>

                        <TextBox Name="Username_TxtBox" Text="{Binding User.Username,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"></TextBox>

                        <TextBox Name="Pwd_TxtBox" Text="{Binding User.Password,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" ></TextBox>

</Grid>

【问题讨论】:

    标签: binding mvvm-light inotifypropertychanged


    【解决方案1】:

    1) 用户应该是公开的。绑定到私有属性没有意义。

    2) 如果您希望在用户输入值后更改底层属性,您必须将绑定设置为 TwoWay:

    Text="{Binding User.Username,Mode=TwoWay}"
    

    3) 实体类不应派生自ViewModelBase。而是选择ObservableObject

    【讨论】:

    • 我做了您通知的更改,但它仍然无法正常工作(我编辑了我的代码)。正如你所说,我改变了我的模型类(UserBO)中的派生......
    猜你喜欢
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    • 2015-08-06
    • 2011-02-22
    相关资源
    最近更新 更多