如何在 WPF MVVM 中进行数据绑定
本文关键字:数据绑定 MVVM WPF | 更新日期: 2023-09-27 18:33:47
This is Model
class DataModel
{
string _inputvalue;
public string FirstName
{
get { return _inputvalue; }
set { _inputvalue= value; }
}
}
这是视图模型
class MyViewModel : INotifyPropertyChanged
{
DataModel _data;
public MyViewModel ()
{
_data = new DataModel { FirstName= "DefaultName" };
}
public DataModel Data
{
get{return _data;}
set{_data = value;}
}
public string FirstName
{
get { return _data.FirstName; }
set {_data.FirstName= "NewName";
OnPropertyChanged("FirstName"):
}
}
public event PropertyChangedEventHandler PropertyChanged;
void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
这是视图
<TextBox Text="{Binding FirstName}"
Margin="8,59,76,122" />
我的问题是:
1)由于我刚刚启动MVVM,我想知道这是否是正确的方法?
2)我希望我的FirstName
来自数据集。示例代码会像
string _getname=MyDS.Tables[0].Rows[0][1].ToString();
我可以在哪里放置此代码?
谢谢大家
- 你走在正确的轨道上。
- 它属于模型内部或附近。由于您不想在视图模型构造函数中创建模型,因此您需要将某种存储库服务注入到视图模型中,以便您访问创建和检索模型。然后,该存储库或模型本身将可以访问表,数据集等。
下面是视图模型的粗略示例:
class MyViewModel : INotifyPropertyChanged
{
private IModelRepository _repository;
public MyViewModel(IModelRepository repository)
{
_repository = repository;
Models = repository.GetAllModels();
}
public IEnumerable<DataModel> Models { get; set; }
}
public interface IModelRepository
{
IEnumerable<DataModel> GetAllModels();
}
public class MyRepository : IModelRepository
{
public IEnumerable<DataModel> GetAllModels()
{
// obviously nowhere near final code!!!
return new List<DataModel> {
new DataModel {
FirstName = MyDS.Tables[0].Rows[0][1].ToString()
}
};
}
}