[英]Help with WPF data binding
我是 WPF 的新手,我正試圖弄清楚數據綁定是如何工作的,但我運氣不佳。
我試圖從一些簡單的事情開始——將文本框的內容綁定到我程序中的字符串變量。
我閱讀了很多關於數據綁定、XML 命名空間、標記擴展、資源、依賴屬性等等的 MSDN 文檔頁面,但我仍然無法讓它工作。
這是我的 MainWindow.xaml:
<Window x:Class="WpfTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:c="clr-namespace:WpfTest"
Title="MainWindow">
<Grid>
<Grid.Resources>
<c:Foo x:Key="MyFoo"/>
</Grid.Resources>
<TextBox Width="100" Height="28"
Text="{Binding Source=MyFoo,
Path=BarProperty,
Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}"/>
</Grid>
</Window>
還有我的 MainWindow.xaml.cs:
namespace WpfTest
{
public class Foo : DependencyObject
{
public static readonly DependencyProperty BarProperty = DependencyProperty.Register("Bar", typeof(String), typeof(Foo));
public String Bar
{
get { return (String)GetValue(BarProperty); }
set { SetValue(BarProperty, value); }
}
}
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
MyFoo = new Foo { Bar = "hello" };
}
public Foo MyFoo { get; set; }
}
}
我希望程序啟動時文本框顯示“你好”,但它是空的。
有人可以告訴我我做錯了什么嗎?
您需要將 Window 的DataContext
設置為自身。
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
MyFoo = new Foo { Bar = "hello" };
}
這告訴 WPF 在 class 中查找綁定。
每個控件都可以設置一個DataContext
,上面寫着“當我綁定時,我想綁定到這個特定實例上的一個屬性......這是繼承的,所以如果你將 MainWindow 的DataContext
設置為它自己,那么MainWindow
內的所有控件MainWindow
將綁定到MainWindow
上的屬性。
您需要指定來源。 任何一個:
給 window 起一個名字,比如 Name="mywin",用 ElementName="myWin" 改變你的綁定
或者設置 window DataContext 像:
DataContext="{Binding ElementName="myWin"} - 如果您不希望我無法發布未經測試的名稱,您也可以使用 RelativeSource - 正如您還注意到的那樣,綁定往往需要測試:)
這可能會有所幫助:
http://blogs.msdn.com/b/wpfsdk/archive/2006/10/19/wpf-basic-data-binding-faq.aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.