在命令中设置属性时,绑定不会更新

时间:2013-10-30 17:10:09

标签: wpf data-binding mvvm icommand

我在尝试使一个简单的事情工作时遇到了一个令人惊讶的困难,即在一个命令绑定到Button的方法中设置一个属性。

当我在ViewModel构造函数中设置属性时,View中正确显示了正确的值,但是当我使用命令的方法设置此属性时,View不会更新,尽管我创建了任何断点(甚至在我RaisePropertyChanged中的ViewModelBase。我正在使用在线教程中轻松找到的香草RelayCommand(如果我没弄错的话,可以从Josh Smith那里找到)。

我的项目可以下载here(Dropbox);

下面是一些重要的代码块:

视图模型:

public class IdiomaViewModel : ViewModelBase
{

    public String Idioma {
        get { return _idioma; }
        set { 
            _idioma = value;
            RaisePropertyChanged(() => Idioma);
        }
    }
    String _idioma;



    public IdiomaViewModel() {
        Idioma = "nenhum";
    }


    public void Portugues () { 
        Idioma = "portu";
    }
    private bool PodePortugues()
    {
        if (true) // <-- incluir teste aqui!!!
            return true;
        return false;
    }
    RelayCommand _comando_portugues;
    public ICommand ComandoPortugues {
        get {
            if (_comando_portugues == null) {
                _comando_portugues = new RelayCommand(param => Portugues(),
                                                param => PodePortugues());
            }
            return _comando_portugues;
        }
    }



    public void Ingles () { 
        Idioma = "ingle";
    }
    private bool PodeIngles()
    {
        if (true) // <-- incluir teste aqui!!!
            return true;
        return false;
    }
    RelayCommand _comando_ingles;
    public ICommand ComandoIngles {
        get {
            if (_comando_ingles == null) {
                _comando_ingles = new RelayCommand(param => Ingles(),
                                                param => PodeIngles());
            }
            return _comando_ingles;
        }
    }

}

查看后面没有额外的代码:

<Window x:Class="TemQueFuncionar.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:app="clr-namespace:TemQueFuncionar"
        Title="MainWindow" Height="350" Width="525">

    <Window.DataContext>
        <app:IdiomaViewModel/>
    </Window.DataContext>

    <StackPanel>
        <Button Content="Ingles" Command="{Binding ComandoIngles, Mode=OneWay}"/>
        <Button Content="Portugues" Command="{Binding ComandoPortugues, Mode=OneWay}"/>
        <Label Content="{Binding Idioma}"/>

    </StackPanel>
</Window>

2 个答案:

答案 0 :(得分:1)

Youdid填充接口实现,你没有提到它到基本视图模型。 您缺少此: INotifyPropertyChanged链接到基类的接口,这使得视图刷新内容。

答案 1 :(得分:1)

你错过了ViewModelBase语句:ViewModelBase上的INotifyPropertyChanged