这里的viewmodel名称是什么?

时间:2015-09-29 09:50:26

标签: c# wpf xaml mvvm

我有这段代码:

 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的名称是什么?

4 个答案:

答案 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;