我有这段代码:
public partial class MainWindow : Window
{
public CViewModel ViewModel { get; set; }
public MainWindow()
{
try
{
InitializeComponent(); // create VM first time
try
{
ViewModel = new CViewModel(); // create VM 2nd time
ViewModel.topGrid = TopGrid;
在相应的XAML中我有这个:
<Window
.....
xmlns:c="clr-namespace:CCalc"
....
x:Class="CCalc.MainWindow"
....>
<Window.DataContext>
<c:CViewModel />
</Window.DataContext>
我可以看到CViewModel实例创建了两次:由于 InitializeComponent 而一次由XAML代码创建,一次由新CViewModel()创建。 所以我删除了那行代码。但是,我怎样才能设置 topGrid ? 换句话说:作为我的数据上下文的viewmodel的名称是什么?
答案 0 :(得分:1)
您可以创建任意数量的普通类实例。两个视图模型实例是不同的。由您决定使用哪一个。
要设置topGrid,您必须在代码中访问ViewModel。这可以通过两种方式完成:
{{1}}
答案 1 :(得分:1)
将您的http:\\site.url
媒体资源更改为:
ViewModel
主要你可以做这样的事情:
public CViewModel ViewModel
{
get { return DataContext as CViewModel; }
set { DataContext = value; }
}
答案 2 :(得分:0)
您可以使用datacontext
访问viewmodel(this.DataContext as CViewModel).topGrid = TopGrid;
您可以先测试一下,确保它不是真的。
CViewModel model = (this.DataContext as CViewModel);
if (model != null)
{
model.topGrid = TopGrid;
}
答案 3 :(得分:0)
您应将dataContext
设为new CViewModel
public partial class MainWindow : Window
{
public CViewModel ViewModel { get; set; }
public MainWindow()
{
try
{
InitializeComponent(); // create VM first time
try
{
DataContext = new CViewModel();
然后@Xaruth称呼叫
(this.DataContext as CViewModel).topGrid = TopGrid;