如何在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; }
}
}
你的问题不是很清楚,但我想你的问题是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