2016-05-16 64 views
1

我正在玩MVVM Light以整合到VB.NET项目中。我已经设置了一个小例子,但它不起作用。的结合似乎只去一个方向的视图模型,但没有通知在视图到达:MVVM Light和VB.NET的数据绑定

<Application x:Class="Application" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:mvvmlight2" 
    StartupUri="MainWindow.xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    d1p1:Ignorable="d" 
    xmlns:d1p1="http://schemas.openxmlformats.org/markup-compatibility/2006"> 

<Application.Resources> 

    <vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" xmlns:vm="clr-namespace:mvvmlight2.mvvmlight2.ViewModel" /> 

</Application.Resources> 
</Application> 

模型径直向前

Namespace mvvmlight2.ViewModel 

Public Class MainViewModel 
    Inherits ViewModelBase 

    Public Property Size As Integer 

.... 

定位器

Namespace mvvmlight2.ViewModel 

    Public Class ViewModelLocator 

    Public Sub New() 
    ServiceLocator.SetLocatorProvider(Function() SimpleIoc.[Default]) 
    SimpleIoc.Default.Register(Of MainViewModel)() 
    End Sub 

    Public ReadOnly Property Main As MainViewModel 
    Get 
    Return ServiceLocator.Current.GetInstance(Of MainViewModel) 
    End Get 
    End Property 

    End Class 

End Namespace 

视图

DataContext="{Binding Path=Main, Source={StaticResource Locator}}" 
... 
<Label Content="{Binding Size}" /> 
<Slider Value="{Binding Path=Size}" /> 

滑块更改模型中的值,如我在调试器中看到的。但标签内容不会改变。

我该怎么办?

TIA

+0

是否调用了OnPropertyChange的大小?顺便说MS说“避免数据绑定到Label.Content属性”https://msdn.microsoft.com/en-us/library/bb613560%28v=vs.100%29.aspx使用textblock代替 – adminSoftDK

回答

0

你的属性必须触发PropertyChanged事件,这在MVVMLight,通过RaisePropertyChanged()功能来完成。在C#中,有片段可用,这创造样特性:

/// <summary> 
/// The <see cref="SummaryVisible" /> property's name. 
/// </summary> 
public const string SummaryVisiblePropertyName = "SummaryVisible"; 

private bool _summaryVisible = false; 

/// <summary> 
/// Sets and gets the ShowSummary property. 
/// Changes to that property's value raise the PropertyChanged event. 
/// </summary> 
public bool SummaryVisible 
{ 
    get 
    { 
     return _summaryVisible; 
    } 
    set 
    { 
     if (_summaryVisible == value) 
     { 
      return; 
     } 
     _summaryVisible = value; 
     RaisePropertyChanged(() => SummaryVisible); 
    } 
} 

我相信你可以直接翻译成VB。

编辑

已经只是看着我的版本的Visual Studio,如果你安装了MVVMLight Toolkit Extension,你得到的VB代码段为好。