MVVM 轻型绑定
MVVM Light Binding
我正在处理 WPF 项目并使用 MVVM light。文本框绑定似乎不起作用。你知道为什么吗?我通过 MVVM 轻型框架中实现的 ViewModelBase Class 使用 INotifyPorpertyChanged 实现。
我有 2 个文本框用户名和密码...我希望当用户在两个文本字段中输入字符时,链接到这些控件的属性的值会更改。
谢谢。
ViewModel
#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>
1) 用户应该是public。绑定到私有属性没有意义。
2) 如果您希望在用户输入值后更改基础属性,您必须将绑定设置为 TwoWay:
Text="{Binding User.Username,Mode=TwoWay}"
3) 实体 类 不应派生自 ViewModelBase
。取而代之的是 ObservableObject
.
我正在处理 WPF 项目并使用 MVVM light。文本框绑定似乎不起作用。你知道为什么吗?我通过 MVVM 轻型框架中实现的 ViewModelBase Class 使用 INotifyPorpertyChanged 实现。
我有 2 个文本框用户名和密码...我希望当用户在两个文本字段中输入字符时,链接到这些控件的属性的值会更改。
谢谢。
ViewModel
#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>
1) 用户应该是public。绑定到私有属性没有意义。
2) 如果您希望在用户输入值后更改基础属性,您必须将绑定设置为 TwoWay:
Text="{Binding User.Username,Mode=TwoWay}"
3) 实体 类 不应派生自 ViewModelBase
。取而代之的是 ObservableObject
.