WPF에서 사용자 지정 컨트롤을 만들었으며 올바르게 바인딩하는 데 문제가 있습니다. 코드의 속성 값을 명시 적으로 설정하면 모든 것이 잘 작동합니다. 다음과 같이WPf 바인딩 문제
<TextBox Name="txtText" Grid.Row="0" Grid.Column="0" IsReadOnly="True" Text="{Binding Text, Mode=OneWay}" />
그리고 코드의 관련 속성 뒤에 다음과 같습니다 : 지금
public static readonly DependencyProperty TextConverterProperty = DependencyProperty.Register("TextConverter", typeof(IValueConverter), typeof(Selector));
public static readonly DependencyProperty EntityIdProperty = DependencyProperty.Register("EntityId", typeof(long), typeof(Selector));
public string Text
{
get
{
string result = this.EntityId.ToString();
if (this.TextConverter != null)
{
result = this.TextConverter.Convert(result, null, null, null) as string;
}
return result;
}
}
public long EntityId
{
get
{
return (long)this.GetValue(EntityIdProperty);
}
set
{
this.SetValue(EntityIdProperty, value);
this.OnPropertyChanged("Text");
this.OnPropertyChanged("EntityId");
}
}
public IValueConverter TextConverter
{
get
{
return this.GetValue(TextConverterProperty) as IValueConverter;
}
set
{
this.SetValue(TextConverterProperty, value);
}
}
그리고 내 페이지의 XAML 구현 : 여기에
내 컨트롤 내의TextBox
에 대한 XAML의
<controls:Selector x:Name="txtReferringCase" EntityId="{Binding ReferringDACaseId}" TextConverter="{StaticResource daCaseNumberConverter}" Grid.Column="5" Grid.Row="0" Grid.ColumnSpan="3" ButtonClicked="txtReferringCase_ButtonClicked" />
이제 이상한 부분이 있습니다. 나는 페이지의 DataContext를 설정할 수 있으며, 아무 일도 발생하지 않습니다,하지만 난 주석 행의 주석을 해제 할 때 텍스트가 문제없이 내 사용자 컨트롤에 표시 :
_caseScreen = new DACaseScreen(itemId);
this.DataContext = _caseScreen;
//this.txtReferringCase.EntityId = _caseScreen.ReferringDACaseId;
편집 : 내가 얘기를 깜빡 했네요 또 한가지 .. . 중단 점을 누르고 컨트롤의 EntityId 및 Text 속성을 확인하면 두 값 모두 예상 한 값이 표시됩니다. UI가 업데이트되지 않는 것 같습니다.
'DataContext'를 변경하면 어떻게 될 것으로 예상됩니까? – Jon