我在代码后面有这个Text
依赖属性:
public static DependencyProperty TextProperty =
DependencyProperty.Register("Text", typeof(string), typeof(MainWindow),
new PropertyMetadata("Hello world"));
public string Text {
get { return (string)GetValue(TextProperty); }
set { SetValue(TextProperty, value); }
}
我想将label的内容绑定到Text
属性,以便标签显示Text
属性的实际值,反之亦然。
<Label Content="{Binding ???}" />
我该怎么做?
我之前做过一段时间,但现在我记不起来了 - 这很简单。最简单的代码将被接受。
答案 0 :(得分:15)
将Window / Control的DataContext设置为同一个类,然后在绑定上指定路径,如下所示:
public class MyWindow : Window {
public MyWindow() {
InitializeComponents();
DataContext = this;
}
public string Text { ... }
}
然后在你的xaml:
<Label Content="{Binding Path=Text}">
答案 1 :(得分:12)
您必须设置窗口的DataContext才能工作。 XAML:
<Window x:Class="WpfApplication2.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"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<Grid>
<StackPanel>
<Label Content="{Binding Text}" />
<Button Content="Click me" Click="HandleClick" />
</StackPanel>
</Grid>
</Window>
代码隐藏:
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public static DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(MainWindow), new PropertyMetadata("Hello world"));
public string Text
{
get { return (string)GetValue(TextProperty); }
set { this.SetValue(TextProperty, value); }
}
public MainWindow()
{
InitializeComponent();
}
protected void HandleClick(object sender, RoutedEventArgs e)
{
this.Text = "Hello, World";
}
}
答案 2 :(得分:1)
当你说它在代码隐藏中时,你的意思是它在你的类窗口的代码中?
您可能希望绑定到祖先类型为Window的RelativeSource。或者,如果尚未设置数据上下文,则在Load事件中,将窗口的DataContext属性设置为窗口本身(this),然后使用{Binding Text}。
答案 3 :(得分:1)
在XAML中将 DataContext 设置为Code-Behind可能有点棘手但通常这些情况最常见:
<Window
blahhhh..
DataContext={Binding RelativeSource={RelativeSource Mode=Self}}>
或
<UserControl
Blahhhh....
DataContext={Binding RelativeSource={RelativeSource Mode=Self}}>
2。如果您将窗口或用户控件的 DataContext 设置为后面的代码并具有子控件,则需要将其 DataContext 设置为Code-Behind you可以使用以下内容:
<Label DataContext={Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window}}/>
自定义 UserControl :
<Label DataContext={Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=UserControl}}/>
在本案例中将 DataContext 设置为self,将使Binding引用Label对象本身而不是Control的Code-Behind。我希望这会有所帮助。