如何使用XAML在DataContext中设置类?

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可以设置值?

123*_*9 0 5

删除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 MicroMVVM Toolkit集成一些实现MVVM的有用框架.


小智 5

一段时间后,我写了一篇关于将XAML控件绑定到代码隐藏属性的不同选项的文章.这可能对你有帮助.

http://codingseason.blogspot.in/2013/05/data-binding-xaml-control-to-property.html