2014-09-26 189 views
1

我相信這個問題的解決方案是顯而易見的,但我根本無法弄清楚。我嘗試了所有我能找到的答案,但沒有任何希望。WPF按鈕內容綁定

問題

我有保持按鈕一個簡單的WPF形式。按鈕的文本由視圖模型定義,該視圖模型在點擊時更改文本內容。爲了完整起見,下面是我的xaml和後面的視圖模型。

XAML:

<Window x:Class="MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:vms="clr-namespace:MyVm" 
     Height="163.762" Width="201.758" WindowStyle="ToolWindow" ResizeMode="NoResize" Topmost="True" WindowStartupLocation="CenterScreen"> 
    <Window.DataContext> 
     <vms:MyVm /> 
    </Window.DataContext> 
    <Button Name="Action" Content="{Binding Path=NextAction, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}" Margin="0" MinHeight="50" FontWeight="Bold" FontSize="16" Click="Action_Click"></Button> 
</Window> 

視圖模型:

public class MyVm: INotifyPropertyChanged 
{ 
    private String _nextAction = "START"; 
    public String NextAction { 
     get { return _nextAction; } 
     set 
     { 
      _nextAction = value; 
      OnPropertyChanged("NextAction"); 
     } 

    } 

    public void ExecuteAction() 
    { 
     if (_nextAction == "START") 
      NextAction = "STOP"; 

     if (_nextAction == "STOP") 
      NextAction = "START"; 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    [NotifyPropertyChangedInvocator] 
    public void OnPropertyChanged(string propertyName) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 
     if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 

問題

當我按一下按鈕,我希望文字改變從 「開始」 「STOP」反之亦然。

  • 視圖模型中的邏輯似乎工作正常。
  • 正確調用OnPropertyChanged
  • OnPropertyChangedhandler不是null

點擊按鈕對UI沒有影響。我究竟做錯了什麼?

回答

3

下面的邏輯是不正確......

public void ExecuteAction() 
    { 
     if (_nextAction == "START") 
      NextAction = "STOP"; 

     if (_nextAction == "STOP") 
      NextAction = "START"; 
    } 

它應該是...

public void ExecuteAction() 
    { 
     if (_nextAction == "START") { 
      NextAction = "STOP"; 
     } else { 
      NextAction = "START"; 
     } 
    } 

你正在改變下一步的動作停止,然後將下面的代碼行正在改變其回再次立即。

+0

感謝您的回答,更改綁定模式並沒有幫助:( – GETah 2014-09-26 08:59:20

+0

查看更新....... – BenjaminPaul 2014-09-26 08:59:54

+0

+1。aghghgh,笨我!!!非常感謝! – GETah 2014-09-26 09:02:07