C# 在视图之间共享对象&;MVVM中的视图模型
我是WPF+MVVM的新手,在了解viewmodels时遇到了麻烦 我有一个名为FSystem的对象,它包含大量从XML填充的列表C# 在视图之间共享对象&;MVVM中的视图模型,c#,wpf,mvvm,C#,Wpf,Mvvm,我是WPF+MVVM的新手,在了解viewmodels时遇到了麻烦 我有一个名为FSystem的对象,它包含大量从XML填充的列表 public class FSystem : ObservableObject { public List<FUser> _userList; public List<FZone> _zoneList; public List<FSource> _sourceList; public string
public class FSystem : ObservableObject
{
public List<FUser> _userList;
public List<FZone> _zoneList;
public List<FSource> _sourceList;
public string _projectName { get; set; }
private string _projectVersion { get; set; }
private string _processorIp { get; set; }
private bool _isMultiLingualModeOn { get; set; }
private int _systemIncludeLighting { get; set; }
private int _systemIncludeWindowsTreatments { get; set; }
private int _systemIncludeSip { get; set; }
private int _systemIncludeCamaras { get; set; }
public FSystem()
{
UserList = new List<FUser>();
}
}
这是下面的MainViewModel,它包含了加载XML和属性FSystem的命令,我希望在其他视图模型中使用这些命令
public class MainViewModel : ViewModel
{
private Fystem fSystem;
public FSystem FSystem
{
get { return fSystem; }
private set
{
fSystem = value;
NotifyPropertyChanged("FSystem");
}
}
public MainViewModel()
{
InitiateState();
WireCommands();
}
private void InitiateState()
{
FSystem = new FSystem();
}
private void WireCommands()
{
XDocumentLoadCommand = new RelayCommand(XDocumentLoad) {IsEnabled = true};
ClearDataCommand = new RelayCommand(ClearData) {IsEnabled = true};
}
public RelayCommand XDocumentLoadCommand { get; private set; }
private void XDocumentLoad()
{
var openDlg = new OpenFileDialog
{
Title = "Open .FAS",
DefaultExt = ".fas",
Filter = "F System Files (*.fas)|*.fas",
Multiselect = false
};
bool? result = openDlg.ShowDialog() == DialogResult.OK;
if (result != true) return;
FSystem = XMLParsers.ParseByXDocument(openDlg.FileName);
}
该应用程序基本上允许用户更改不同的对象(FUser、FZone、FSource等)。我的想法是,用户将加载XML,然后能够在不同的视图上编辑不同的列表对象
在MVVM中,正确的方法是什么
我计划(希望)让用户、区域和源视图显示数据网格,这些数据网格由模型中各自的数据填充。创建特定的视图模型,并使用依赖项注入将相关数据传递给它们(此列表或该列表) 这样,视图模型就不需要了解其他内容,您可以轻松地模拟它进行测试,并在设计器上查看虚拟数据 对于最简单的示例,请将粘贴复制到Linqpad中。两个模拟视图模型都有一个依赖项(在本例中为i)。您只需传递您的列表:
void Main()
{
int someInt = 5;
int anotherInt = 7;
VM vm1 = new VM(someInt);
VM vm2 = new VM(anotherInt);
vm1.RevealI();
vm2.RevealI();
}
public class VM{
private int _i;
public VM(int i)
{
_i = i;
}
public void RevealI() { Console.WriteLine("value of i is: " + _i); }
}
除此之外,还有更多的项目:
void Main()
{
int someInt = 5;
int anotherInt = 7;
VM vm1 = new VM(someInt);
VM vm2 = new VM(anotherInt);
vm1.RevealI();
vm2.RevealI();
}
public class VM{
private int _i;
public VM(int i)
{
_i = i;
}
public void RevealI() { Console.WriteLine("value of i is: " + _i); }
}
除此之外,还有更多的项目: