WPF简单数据绑定

WPF简单数据绑定,wpf,xaml,data-binding,Wpf,Xaml,Data Binding,我想绑定textbox,但它不显示字符串。第二件事是我想定期更新名称字符串。有解决办法吗 这是我的c#代码: xaml代码: <Grid Name="myGrid" Height="300"> <TextBox Text="{Binding Path=Name}"/> </Grid> 您需要将您的名称定义为从属属性: public string Name { get { return (string)GetValue(NameProperty);

我想绑定textbox,但它不显示字符串。第二件事是我想定期更新名称字符串。有解决办法吗

这是我的c#代码:

xaml代码:

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

您需要将您的
名称定义为
从属属性

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}}"/>

您需要删除属性而不是字段,您在此处删除的是字段

public String Name {get; set;}
另外,它不应该在控制文件(UI文件)中。将其移动到单独的类并将其设置为DataContext

另外,正如Vlad所指出的,您需要通知UI事情发生了变化,而简单的property并没有这种情况


这篇文章写得不错:

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

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

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

      InitializeComponent();
  }
}
如果要支持更改通知和其他DP相关功能,或者使用
INotifyPropertyChanged
,也可以将其定义为依赖项属性。我建议您阅读更多关于WPF数据绑定的内容


希望这会有所帮助

他需要从更改字段开始,WPF不会绑定到字段属性。@MBen:OP需要选择更改,所以他要么需要依赖,要么需要财产INotifyPropertyChanged@Vlad:在这种情况下,OP应该使用
INotifyPropertyChanged
,而不是依赖属性。@Meleak:您的声明有任何支持吗?@Meleak两者都可以,实际上依赖属性比使用INotifyPropertyChanged更快。这不起作用,OP需要更改变量,并将这些更改反映在UI中。但他还有很长的路要走,我建议读一些关于数据绑定的基础知识
public partial class Window1 : Window
{
  public String Name { get; set; }

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

      InitializeComponent();
  }
}
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;
}