我想绑定文本框但是它不显示字符串。第二件事是我想定期更新Name字符串。任何解决方案?
这是我的c#代码:
public partial class Window1 : Window
{
public String Name = "text";
}
xaml代码:
<Grid Name="myGrid" Height="300">
<TextBox Text="{Binding Path=Name}"/>
</Grid>
答案 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。