WPF简单数据绑定

时间:2012-07-05 08:29:23

标签: wpf xaml data-binding

我想绑定文本框但是它不显示字符串。第二件事是我想定期更新Name字符串。任何解决方案?

这是我的c#代码:

public partial class Window1 : Window
{
  public String Name = "text";
}

xaml代码:

<Grid Name="myGrid" Height="300">
  <TextBox Text="{Binding Path=Name}"/>
</Grid>

4 个答案:

答案 0 :(得分:3)

public partial class MainWindow : Window,INotifyPropertyChanged
{
    public MainWindow()
    {
        InitializeComponent();
        DataContext = this;
    }
    private string _name;
    public string Name
    {
        get
        {
            return _name;
        }
        set
        {
            _name = value;
            NotifyCahnge("Name");

        }

    }

    private void NotifyChange(string prop)
    { 
        if(PropertyChanged!=null)
            PropertyChanged(this,new PropertyChangedEventArgs(prop));
    }

    public event PropertyChangedEventHandler PropertyChanged;
}

希望这会有所帮助

答案 1 :(得分:2)

你需要delcare属性而不是字段,你在这里看到的是一个字段。

public String Name {get; set;}

另外,它不应该在Control文件(UI文件)中。将其移动到单独的类并将其设置为DataContext。

当Vlad指出你需要向UI通知事情发生变化时,简单的属性就没有了。

关于dataBinding的好文章:

答案 2 :(得分:1)

您需要将Name定义为DependencyProperty

public string Name
{
    get { return (string)GetValue(NameProperty); }
    set { SetValue(NameProperty, value); }
}

public static readonly DependencyProperty NameProperty = 
    DependencyProperty.Register("Name", typeof(string), typeof(Window1));

(请注意,Visual Studio为此定义了一个方便的代码段propdp,请尝试键入propdp + TAB + TAB 。)

然后,您需要正确绑定。这样的事情:

<TextBox Text="{Binding Name, RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}"/>

答案 3 :(得分:1)

WPF绑定适用于属性,而不是字段。您需要将Name定义为属性,并设置Window的数据上下文:

public partial class Window1 : Window
{
  public String Name { get; set; }

  public Window1()
  {
      Name = "text";
      DataContext = this;

      InitializeComponent();
  }
}

如果要支持更改通知和其他DP相关功能或使用INotifyPropertyChanged,也可以将其定义为依赖属性。我建议您阅读有关WPF数据绑定的更多信息here