【发布时间】:2014-08-19 17:29:37
【问题描述】:
我确定这已经被问过了,但我对 MVVM 和 WPF 还是新手,不太确定我应该搜索什么。
我有一个视图模型,其中包括模型中的项目,以及一些额外的临时数据项目,这些数据项目将全部传递给 process.start()。我有一个文本框的堆栈面板,并希望允许用户输入“ModelName”,如果存在,ViewModel 将获取并设置与 ModelName 关联的“TemplateName”。
我对如何实现这一点有点迷茫。我是否需要创建一个完全独立的 ViewModel,然后从 ModelViewModel 中提取数据?难道我只是在ModelName的集合下写一些代码,可以验证、查询、设置TemplateName吗?
型号:
public partial class Model
{
public string ModelName { get; set; }
public virtual Template Template { get; set; }
和 ViewModel,它接受模型和一些临时数据:
public class LauncherViewModel:ViewModelBase
{
public LauncherViewModel()
{
_ESTContext = new ESTContext();
Models = new ObservableCollection<Model>(_ESTContext.Models);
}
private ESTContext _ESTContext;
private string _modelname;
private string _serialno;
private string _sonumber;
private string _templatename;
private string _outputname;
private Model _selectedmodel;
public ObservableCollection<Model> Models { get; set; }
public string ModelName
{
get { return _modelname; }
set
{
if (!string.Equals(_modelname, value))
{
_modelname = value;
};
}
}
public string TemplateName { get { return _templatename; }}
public string SerialNo { get { return _serialno; } }
public string SONumber { get { return _sonumber; } }
public string OutputName { get { return _outputname; } }
public Model SelectedModel
{
get { return _selectedmodel; }
set
{
if (_selectedmodel != value)
{
_selectedmodel = value;
}
}
}
}
我的观点:
<DockPanel>
<StackPanel Margin="0,78,0,68" Width="233" DataContext="{Binding Models}">
<ComboBox IsEditable="True" Text="{Binding ModelName}" SelectedItem="{Binding SelectedModel}"/>
<TextBox Height="23" TextWrapping="Wrap" Text="{Binding SONumber}"/>
<TextBox Height="23" TextWrapping="Wrap" Text="{Binding SerialNumber}"/>
<Button Content="Button"/>
</StackPanel>
</DockPanel>
【问题讨论】: