WPF简单数据绑定
我想绑定textbox,但它不显示字符串。第二件事是我想定期更新名称字符串。有解决办法吗 这是我的c#代码: xaml代码: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);
<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;
}