2014-05-07 138 views
0

我想制作一个简单的WPF应用程序,其中包含一个Button和一个TextBlock在视图中。我想,当我点击按钮时,向TextBlock写入“Hello”。TextBlock绑定不起作用

这是我的观点:

<Window x:Class="PropertyTest.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
    <Button Name="ButtonIncreaser" Content="Button" Command="{Binding CalculateCommand}" CommandParameter="+" HorizontalAlignment="Left" Height="23" Margin="400,206,0,0" VerticalAlignment="Top" Width="75"/> 
    <TextBlock Name="TextB" HorizontalAlignment="Left" Height="23" Margin="56,206,0,0" TextWrapping="Wrap" Text="{Binding Szoveg,UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Top" Width="292"/> 
    </Grid> 
</Window> 

那MainWindow.cs:

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     ViewModel m = new ViewModel(); 
     this.DataContext = m; 
     this.Show(); 
    } 
} 

而这就是我的视图模型:

public class ViewModel : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 
    public DelegateCommand CalculateCommand { get; private set; } 
    public ViewModel() 
    { 
     CalculateCommand = new DelegateCommand(param => Calculate(param.ToString())); 
    } 

    public void Calculate(string param) 
    { 
     _str = "Hello"; 
    } 

    private string _str; 
    private string Szoveg 
    { 
     get 
     { 
      return _str; 
     } 
     set 
     { 
      _str = value; 
      OnPropertyChanged("Szoveg"); 
     } 
    } 


    public void OnPropertyChanged(String name) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(name)); 
     } 
    } 
} 

我该怎么办了?谢谢!

+1

您的'Szoveg'属性是'private'。需要公开。 – XAMlMAX

回答

3

在你的Calculate函数中,你直接设置你的私人数据成员_str。这不会导致OnPropertyChanged函数被调用,说Szoveg的值已更改。

只是把上面一行是

Szoveg = "Hello" 

,你应该是不错的。

由于XAMIMAX在评论中指出的,你需要改变Szoveg属性是public财产以及 - per MSDN

您使用的绑定源属性的绑定的属性必须 是公共你的班级的属性。显式定义的接口 属性不能用于绑定目的,也不能被保护, 私有,内部或虚拟属性没有实现基本的 。

此外,你并不真的需要你结合UpdateSourceTrigger=PropertyChanged的一部分 - 这是有道理的在某些情况下为TextBox其中用户编辑TextBox的内容。但对于TextBlock而言,在绝大多数情况下,它并没有多少意义,也没有必要。

+1

私人财产不能从课外访问,因此绑定将失败。绑定可能被强调,但被忽略。 :-) @Tim – XAMlMAX

+0

是的,你是对的。谢谢@XAMIMAX。 – Tim

+0

非常感谢,它的作品! ;) – bemul12