Lai*_*290 3 c# wpf datacontext binding
我有一个WPF表单和一个类Users(内容属性Id,Login和Name),在我的这个表单的类中,我得到了一个Users对象,用于将此信息放在表单中,DataContext
并且Binding
我可以把这个Users对象放到我Window.DataContext (this.DataContext = usersObject;)
的代码后面,但我想如果我能用XAML做这个,也许更好
我在我的类UserForm(public Users usersObject {get; set;}
)中设置了一个属性
我的表格 UserForm : Window
<Window DataContext="{What need I put here?">
<Grid>
<TextBlock Text="Id:"/>
<TextBox Name="Id" Text="{Binding Path=Id}"/>
<TextBlock Text="Login:"/>
<TextBox Name="Login" Text="{Binding Path=Login}"/>
<TextBlock Text="Name:"/>
<TextBox Name="Name" Text="{Binding Path=Name}"/>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
UserForm.xaml.cs
public class UserForm : Window
{
public Users userObject { get; set; }
public UserForm(Users user)
{
InitializeComponent();
this.userObject = user;
}
}
Run Code Online (Sandbox Code Playgroud)
我的班级用户
public class Users
{
public int Id { get; set; }
public string Login { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我如何为TextBox 设置userObject
自己Window.DataContext
可以设置值?
删除DataContext绑定,因为您没有显式执行MVVM模式.没有必要做绑定.
在你的Window.xaml中
<Window>
<Grid>
<TextBlock Text="Id:"/>
<TextBox Name="Id" Text="{Binding Path=Id}"/>
<TextBlock Text="Login:"/>
<TextBox Name="Login" Text="{Binding Path=Login}"/>
<TextBlock Text="Name:"/>
<TextBox Name="Name" Text="{Binding Path=Name}"/>
</Grid>
Run Code Online (Sandbox Code Playgroud)
将此添加到代码Window.xaml.cs后面
public class UserForm : Window
{
public Users userObject { get; set; }
public UserForm(Users user)
{
InitializeComponent();
this.DataContext = user;
}
}
Run Code Online (Sandbox Code Playgroud)
如果你在MVVM中这样做,你会做到这样的事情
ViewModel.cs
public class UserViewModel
{
private Users _model;
public UserViewModel(Users model)
{
_model = model;
}
public int Id { get { return _model.Id; } }
public string Login { get { return _model.Login; } set { _model.Login; } }
public string Name { get { return _model.Name; } set { _model.Name; } }
}
Run Code Online (Sandbox Code Playgroud)
现在ViewModel可以根据您的需要进行自定义,您可以公开Model,将其注入构造函数,或者只是在暴露时设置属性值.如果要将ViewModel中的任何值传播回用户界面,请不要忘记实现INotifyPropertyChanged.
View.xaml.cs
公共类UserForm:Window {
public UserForm(Users user)
{
InitializeComponent();
this.DataContext = new UserViewModel(user);
}
Run Code Online (Sandbox Code Playgroud)
View.xaml
您有两个选择,您可以像我在代码后面那样显式设置DataContext,也可以创建一个返回UserViewModel的公共属性.它也是一样的
Model.cs
public class Users { //Whatever properties you need }
Run Code Online (Sandbox Code Playgroud)
现在这是MVVM模式的一个非常简单的例子.一旦了解了基础知识,就可以为Caliburn Micro和MVVM Toolkit集成一些实现MVVM的有用框架.
小智 5
一段时间后,我写了一篇关于将XAML控件绑定到代码隐藏属性的不同选项的文章.这可能对你有帮助.
http://codingseason.blogspot.in/2013/05/data-binding-xaml-control-to-property.html
归档时间: |
|
查看次数: |
11529 次 |
最近记录: |