WPF MVVM数据绑定-单向



我是WPF的新手,但对MVVM有一点了解,到目前为止我已经实现了这一点。

UpdateTableView-View(较大用户控件的短片段(

<UserContol.DataContext>
<local:UpdateTableViewModel />
</UserContol.DataContext>
<StackPanel>
<TextBox Text="{Binding InputPath}"/>
<TextBlock Content="Placeholder" />
</StackPanel>

UpdateTableModel-模型

public class UpdateTableModel : ObservableObject
{
private string _inputPath;
public string InputPath
{
get
{
return _inputPath;
}
set
{
if (value != _inputPath)
{
_inputPath = value;
OnPropertyChanged("InputPath");
}
}
}
}

可观察对象

public class ObservableObject : INotifyPropertyChanged 
{
public event PropertyChangedEventHandler PropertyChanaged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = this.PropertyChanaged;
if (handler != null)
{
PropertyChangedEventArgs e = new PropertyChangedEventArgs(propertyName);
handler(this, e);
}
}
}

和一个空的UpdateTableViewModel

class UpdateTableViewModel : ObservableObject { }

我的问题是,我如何使用数据绑定,以便作为用户,当我在文本框中输入inputPath时,首先我键入的任何内容都存储在属性_inputPath中,这样我就可以在代码后面使用它,并在文本块中反映出来。

我做了一些研究,发现了单向和双向数据绑定,但我真的无法确定我还需要为我想要的功能添加什么。

提前谢谢。

视图模型必须包含要绑定的属性。

通常,TextBox.Text属性会自动绑定TwoWay。这是默认行为。因此,在不明确指定Binding.Mode的情况下,输入到TextBox中的文本将自动发送到绑定源。在您的情况下,输入将自动发送到InputPath属性。

UpdateTableModel.cs

public class UpdateTableModel
{
public void SaveUserNameToFile(string filePath, string userName)
{
File.AppendAllText(filePath, userName, Encoding.UTF8);
}
}

UpdateTableViewModel.cs
RelayCommand的实现可以在
Microsoft文档:模式-具有模型视图视图的WPF应用程序模型设计模式-中继命令逻辑中找到

class UpdateTableViewModel : ObservableObject 
{ 
private UpdateTableModel UpdateTableModel { get; }
public ICommand SaveUserCommand => new RelayCommand(SaveUserName);
private string _userName;
public string UserName
{
get => _userName;
set
{
if (value != _userName)
{
_userName = value;
OnPropertyChanged(nameof(UserName));
}
}
}
private string _inputPath;
public string InputPath
{
get => _inputPath;
set
{
if (value != _inputPath)
{
_inputPath = value;
OnPropertyChanged(nameof(InputPath));
}
}
}
public UpdateTableViewModel()
{
this.UpdateTableModel = new UpdateTableModel();
}
// Alternative constructor
public UpdateTableViewModel(UpdateTableModel updateTableModel)
{
this.UpdateTableModel = updateTableModel;
}
private void SaveUserName(object param)
{
// Pass the data to the model
this.UpdateTableModel.SaveUserNameToFile(this.InputPath, this.UserName);
}
}

UpdateTableView.xaml

<UserControl>
<UserContol.DataContext>
<local:UpdateTableViewModel />
</UserContol.DataContext>
<StackPanel>
<TextBox Text="{Binding UserName}" />
<TextBox Text="{Binding InputPath}" />
<Button Command="{Binding SaveUserCommand}" 
Content="Save to File" />
</StackPanel>
</UserControl>

最新更新