如何在WPF MVVM方法中将结构绑定到文本框控件

本文关键字:绑定 结构 文本 控件 WPF MVVM 方法 | 更新日期: 2023-09-27 18:21:08

我想将三个文本框绑定到一个结构的三个成员。这是我的XAML代码:

<TextBox Grid.Column="1" Height="32" HorizontalAlignment="Left" Margin="322,12,0,0" Text="{Binding SelectedStudentDetails.FirstName, Mode=TwoWay}" TextWrapping="Wrap" VerticalAlignment="Top" Width="199" />
<TextBox Grid.Column="1" Height="30" HorizontalAlignment="Left" Margin="322,75,0,0" Text="{Binding SelectedStudentDetails.LastName,Mode=TwoWay}" TextWrapping="Wrap" VerticalAlignment="Top" Width="199" />
<TextBox Grid.Column="1" Height="33" HorizontalAlignment="Left" Margin="322,137,0,0" Text="{Binding SelectedStudentDetails.City,Mode=TwoWay}" TextWrapping="Wrap" VerticalAlignment="Top" Width="199" />

以下是视图模型片段:

private Student _selectedstudentDetails;
    public Student SelectedStudentDetails
    {
        get {
            return _selectedstudentDetails; 
            }
        set
        {
            if (_selectedstudentDetails != value)
            {
                _selectedstudentDetails = value;
                RaisePropertyChanged("SelectedStudentDetails");
            }
        }
    }


//StudentList is the observable list type
public void AddStudentDetails(object param)
        {
            StudentList.Add(new Student { FirstName = SelectedStudentDetails.FirstName, LastName = SelectedStudentDetails.LastName, City = SelectedStudentDetails.City });
        }

如何使用带文本框控件的绑定结构填充填充学生对象?

学生班级申报:

namespace SimplestMVVM.Model
{
    public class Student
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string City { get; set; }
    }
}

如何在WPF MVVM方法中将结构绑定到文本框控件

你的问题不是很清楚,但我想你的问题是SelectedStudentDetails.FirstName、SelectedStudentDetails s.LastName和SelectedStudentDetails.City总是空的,对吧?

基本上,这是因为您的Student对象必须是viewModel(或者至少是INotifyPropertyChanged)。因为当您从视图中更新其属性时,它必须发出通知。(是的,它必须是财产)。否则,它永远不会通知您更改值,并且它们保持为null。

在我看来,最简单的方法是创建一个具有所需属性的CLASS StudentViewModel。这样你的装订就行了。

另一个解决方案(但老实说,我看不出有什么好的理由这样做,但它仍然应该有效)可以是在INotifyPropertyChanged类中直接转换您的Student。

免费提示,我在这里,如果你滥用保证金,它会在你的XAML中更好。你可以这样做:

   <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>
        <TextBox Grid.Column="0" Height="30" HorizontalAlignment="Left" Text="{Binding SelectedStudentDetails.FirstName, Mode=TwoWay}" TextWrapping="Wrap" VerticalAlignment="Top" Width="199" />
        <TextBox Grid.Column="1" Height="30" HorizontalAlignment="Left" Text="{Binding SelectedStudentDetails.LastName,Mode=TwoWay}" TextWrapping="Wrap" VerticalAlignment="Top" Width="199" />
        <TextBox Grid.Column="2" Height="30" HorizontalAlignment="Left" Text="{Binding SelectedStudentDetails.City, Mode=TwoWay}" TextWrapping="Wrap" VerticalAlignment="Top" Width="199" />
    </Grid>

为学生类实现INotifyPropertyChanged