我在WPF中有一个文本块,它绑定到我的ViewModel类中的属性。单击按钮我希望修改属性并期望在我的文本块中反映出来。我希望所有这些都是纯粹使用MVVM(MVVMLight)完成的。我正在使用MMVM灯和VS 2012。 挑战 - 在按钮上单击更改未反映。虽然程序执行是在属性内进行的,但是没有进行更改。
请帮助!!
计划 - 视图:
<Window x:Class="MvvmLight1_Trail.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:ignore="http://www.ignore.com"
mc:Ignorable="d ignore"
Height="500"
Width="500"
Title="MVVM Light Application"
DataContext="{Binding Main, Source={StaticResource Locator}}">
<Grid x:Name="LayoutRoot">
<TextBlock FontSize="34"
Text="{Binding Path=MyText,UpdateSourceTrigger=Default, Mode=TwoWay}"
VerticalAlignment="Center"
HorizontalAlignment="Center"
TextWrapping="Wrap" />
<Button Width="100" Height="100" Command="{Binding PressCommand}" Margin="198.985,277.537,193.014,92.462" Content="Press Me"/>
</Grid>
查看模型
using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Command;
using MvvmLight1_Trail.Model;
using System.ComponentModel;
using System.Threading;
namespace MvvmLight1_Trail.ViewModel
{
public class MainViewModel : ViewModelBase
{
public RelayCommand PressCommand { get; private set; }
Thread t;
private string _welcomeTitle = string.Empty;
public string MyText
{
get
{
return _welcomeTitle;
}
set
{
if (_welcomeTitle == value)
{
return;
}
_welcomeTitle = value;
RaisePropertyChanged(MyText);
}
}
/// <summary>
/// Initializes a new instance of the MainViewModel class.
/// </summary>
public MainViewModel()
{
PressCommand = new RelayCommand(() => MyFunc());
myfunc();
}
private void MyFunc()
{
this.MyText = "Hi2";
}
private void myfunc()
{
this.MyText = "Hello";
this.MyText = "Hi";
}
}
}
答案 0 :(得分:7)
替换
RaisePropertyChanged(MyText);
到
RaisePropertyChanged("MyText");
应该在属性名称上引发PropertyChanged事件,而不是在属性值上引发。
答案 1 :(得分:4)
@Rohit Vats已经回答了。您也可以调用RaisePropertyChanged,RaisePropertyChanged( () => MyText)
以便以后重命名。
答案 2 :(得分:1)
比赛结束但是:
在新的C#6中你也可以使用这样的名字:
RaisePropertyChanged(nameof(MyText))