gpt4 book ai didi

c# - 如何在 WPF MVVM 中进行数据绑定(bind)

转载 作者:行者123 更新时间:2023-11-30 22:13:25 25 4
gpt4 key购买 nike

这是模型

class DataModel
{
string _inputvalue;
public string FirstName
{
get { return _inputvalue; }
set { _inputvalue= value; }
}
}

这是 View 模型

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));
}

}

这是 View

  <TextBox  Text="{Binding FirstName}"
Margin="8,59,76,122" />

我的问题是:

1) 由于我刚刚开始使用 MVVM,我想知道这样做是否正确?

2) 我希望我的 FirstName 来自 Dataset。示例代码就像

  string _getname=MyDS.Tables[0].Rows[0][1].ToString();

我在哪里可以放置这段代码??

谢谢大家

最佳答案

  1. 您走在正确的轨道上。
  2. 它属于模型中或附近。由于您不想在 View 模型构造函数中创建模型,因此您需要将某种存储库服务注入(inject) View 模型,使您能够访问创建和检索模型。然后,该存储库或模型本身将可以访问表格、数据集等。

这是 View 模型的粗略示例:

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()
}
};
}
}

关于c# - 如何在 WPF MVVM 中进行数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19174379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com