SearchText라는 검색 텍스트에 대한 종속성 속성이있는 사용자 정의 컨트롤을 작성하고 있습니다. 컨트롤의 소비자가 데이터 바인딩을 사용하도록 허용하기 때문에 종속성 속성입니다. 사용자 정의 컨트롤에는 사용자가 검색 텍스트를 입력 할 수있는 WPF TextBox가 있습니다.사용자 지정 종속성 속성이있는 UserControl의 문제
데이터 바인딩을 사용하여 TextBox의 Text 종속성 속성을 사용하여 사용자 정의 컨트롤의 SearchText 종속성 속성을 연결할 수 있지만 텍스트 바인딩이 입력 포커스를 잃을 때만이 바인딩이 실행됩니다. 내가 원하는 것은 SearchText를 매번 텍스트를 변경 한 후에 업데이트하는 것입니다. 그래서 SearchText를 Text 값으로 설정 한 사용자 정의 컨트롤에 TextChanged 이벤트 처리기를 추가했습니다.
내 문제는 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는 검색 텍스트라는 속성을 가진 개체로 설정 한 사용자 컨트롤의 인스턴스를 포함하는 창.
<uc:UserControlSearchTextBox SearchText="{Binding SearchText}" />
윈도우의 데이터 컨텍스트 : 나는 텍스트 상자에 입력 할 때
public class DataSourceUserManual : DataSourceBase
{
private string _searchText;
public string SearchText
{
get { return _searchText; }
set
{
_searchText = value;
...
OnPropertyChanged("SearchText");
}
}
}
불행하게도,이 세터가 호출되지 않습니다. 아이디어가 있으십니까? 다음 후
는 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}" />
효과가 없습니다.
특별한 "나는이"묶인 "바인딩에 관해주의해야합니다.
그 힌트를 가져 주셔서 감사합니다! 하지만 지금 제가 가지고있는 두 가지 바인딩에 문제가 있습니다. 업데이트 된 질문을 참조하십시오. –
모드를 OneWayToSource로 설정하면 두 바인딩이 작동하므로 모든 질문에 지금 답변이 제공됩니다. 감사. –
이전에 업데이트 된 답변을 발견하지 못했습니다 ... 이제 FrameworkPropertyMetadataOptions.BindsTwoWayByDefault를 설정하고 두 바인딩을 두 가지 방법으로 남겨 뒀습니다. 다시 한번 감사드립니다. –