간단한 종속성 속성이 있습니다. 단추가있는 사용자 정의 컨트롤이 있습니다. 호출자가 MyName이라는 속성을 "Hello"로 설정하도록합니다. 나는 의존성 프로퍼티 코드가 문자열 "World"를 마지막에 추가하기를 원한다. 다음은이 시도 내 코드는 다음과 같습니다종속성 속성의 setter 값은 어떻게 수정합니까?
#region MyNAME DEPENDENCY PROPERTY
private string _myName;
public string MyName
{
get { return this._myName; } //a breakpoint here never trips
set
{
this._myName = value;
this.OnPropertyChanged("MyName");
}
}
public string MyName2 { get { return this._myName; } } //a breakpoint here will trip
public static readonly DependencyProperty MyNameProperty = DependencyProperty.Register("MyName", typeof(string), typeof(MyTabControl), new PropertyMetadata("", OnMyNamePropertyChanged));
private static void OnMyNamePropertyChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)
{
MyTabControl myUserControl = dependencyObject as MyTabControl;
myUserControl.OnMyNamePropertyChanged(e);
myUserControl.OnPropertyChanged("MyName");
}
private void OnMyNamePropertyChanged(DependencyPropertyChangedEventArgs e)
{
this.MyName = (string)e.NewValue + " World";
}
#endregion //end MyNAME
그리고 내 버튼 XAML 코드는 다음과 같습니다 내가 할
<local:MyTabControl MyName="Hello" />
:이 같은이 컨트롤이있는 페이지를로드 할 때
<Button Content="{Binding Path=MyName, Mode=OneWay}" />
"Hello World"라는 버튼이 아니라 "Hello"라고 쓰여진 버튼. 작동
<Button Content="{Binding Path=MyName2, Mode=OneWay}" />
: 내가 지금처럼에는 myname1를 이용할 수 있도록 버튼의 XAML 코드를 변경하면 이상한 부분입니다. getter 코드는 동일합니다 (위 코드 포함). _myName을 가져 오는 코드가 예상보다 일찍 호출되고 있다고 생각합니다. 나도 기대하지 않는 것은 MyName 게터가 결코 호출되지 않는 것입니다. 내가 거기에 브레이크 포인트를 놓을 때, 그것은 여행하지 않는다. 그러나 MyName2를 사용하도록 버튼 바인딩 경로를 변경하면 해당 getter에 놓는 중단 점이 이동합니다.
내가 뭘 잘못하고 있니? MyName 속성을 사용하고 내 버튼을 "Hello World"로 표시하려면 어떻게해야합니까? (두 번째 게터를 사용하지 않고)
EDIT : 새 코드 추가.
나는 당신의 제안을 모두 가져다가 내 C# 코드를 변경 단순히이 :public string MyName
{
get { return (string)GetValue(MyNameCustomProperty); }
set { SetValue(MyNameCustomProperty, value + " World"); }
}
public static DependencyProperty MyNameCustomProperty = DependencyProperty.Register("MyName", typeof(string), typeof(MyTabControl));
(난 아직도 속성을 depency에 새로 온) 내 앞의 코드와 함께 있었다 나는 여전히 같은 문제가 있습니다 . 이 코드로 뭔가를 할 수 있습니까?
사용자 정의 OnPropertyChanged 함수가 있다고 가정합니까?기본값은'PropertyChangedEventArgs'를 사용하는'string'을 사용하지 않습니다. –
My 클래스'MyTabControl'은'INotifyPropertyChanged'를 구현합니다. 나는'this.PropertyChanged (...)'를 호출하는 간단한 OnPropertyChanged 이벤트 핸들러를 가지고있다. 나는 끈을 잡는다. 내가 붙여 넣은 코드에서 빠져 나온 것을 볼 수 있습니다. – user2023861