我正在爲一個名爲SearchText的搜索文本編寫一個依賴屬性的用戶控件。它是一個依賴屬性,因爲我想讓控件的使用者使用數據綁定。用戶控件包含一個WPF文本框,用戶可以在其中輸入搜索文本。UserControl與自定義依賴屬性的問題
我可以使用數據綁定將用戶控件的SearchText依賴項屬性與TextBox的Text依賴項屬性連接起來,但僅當文本框丟失輸入焦點時纔會觸發此綁定。我想要的是每次更改文本後都要更新SearchText。 所以我添加了一個TextChanged事件處理程序到用戶控件,我將SearchText設置爲Text的值。
我的問題是,SearchText綁定不起作用,源永遠不會更新。我究竟做錯了什麼?
這裏的用戶控件代碼隱藏的相關部分:
public partial class UserControlSearchTextBox : UserControl
{
public string SearchText
{
get { return (string)GetValue(SearchTextProperty); }
set { SetValue(SearchTextProperty, value); }
}
public static readonly DependencyProperty SearchTextProperty =
DependencyProperty.Register("SearchText", typeof(string), typeof(UserControlSearchTextBox), new UIPropertyMetadata(""));
private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
SearchText = ((TextBox)sender).Text;
}
...
}
包含用戶控件的實例都有它的DataContext設置爲有一個屬性也被稱爲SEARCHTEXT對象的窗口。
<uc:UserControlSearchTextBox SearchText="{Binding SearchText}" />
窗口的數據上下文:
public class DataSourceUserManual : DataSourceBase
{
private string _searchText;
public string SearchText
{
get { return _searchText; }
set
{
_searchText = value;
...
OnPropertyChanged("SearchText");
}
}
}
不幸的是,當我輸入在文本框中此setter不叫。 有什麼建議嗎?
以下後Quartermeisters暗示我已經刪除了TextBox_TextChanged事件處理程序,並安裝了一個結合這使TextBox.Text和UserControl.SearchText同步。
<TextBox Text="{Binding ElementName=root,
Path=SearchText,
UpdateSourceTrigger=PropertyChanged}" />
此綁定似乎工作。但是現在用戶控件和窗口的數據上下文之間的綁定被破壞(源不會被更新)。我已經改變了它一點點
<uc:UserControlSearchTextBox SearchText="{Binding Source={StaticResource ResourceKey=dataSource},
Path=SearchText}" />
但沒有效果。
有什麼特別的我必須注意關於這些「鏈接」綁定?
謝謝你的提示! 但現在,我現在有兩個綁定有問題,請查看我更新的問題。 – 2010-06-16 14:45:01
如果我將模式設置爲OneWayToSource,我的兩個綁定工作,所以現在所有問題都回答了。謝謝。 – 2010-06-17 06:59:59
之前沒有注意到您更新的答案...現在我已經嘗試設置FrameworkPropertyMetadataOptions.BindsTwoWayByDefault並將兩種綁定都保留下來 - 並且它可以工作!再次感謝。 – 2010-06-17 07:18:06