0

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

当我在 ViewModel 构造函数中设置属性时,正确的值会正确显示在视图中,但是当我使用命令的方法设置此属性时,视图不会更新,尽管达到了我创建的任何断点(即使RaisePropertyChanged在我的内部ViewModelBase) . 我正在使用RelayCommand在线教程中很容易找到的香草(如果我没记错的话,来自 Josh Smith)。

我的项目可以在这里下载(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>
4

2 回答 2

1

你确实填写了接口实现,把你没有提到基本视图模型。您缺少这个: INotifyPropertyChanged到基类的链接接口,这使得视图刷新了内容。

于 2013-10-30T17:18:22.617 回答
1

您错过了 ViewModelBase:INotifyPropertyChanged 上的声明 ViewModelBase

于 2013-10-30T17:20:44.110 回答