DataTemplate
내부에서 사용하고있는 사용자 정의 컨트롤이 있습니다.이 UserControl
에는 값 속성 (DependencyProperty
로 선언 됨)이 바인딩되어있는 TextBox
이 포함되어 있습니다. 데이터 템플릿에서이 값 속성을 실제 속성 이름 (DependencyProperty
)라고 연결합니다. 그것은 제대로 작동, 나는 값을 이름 속성을 할당하는 동안로드 및 내 TextBox
표시, 나는 TextBox
에서 값을 변경하고 또한 내 이름 속성을 업데이 트합니다. 종속성 속성에 PropertyChangedEventHandler
을 추가하는 동안 문제가 발생했습니다. 유효한 경우 값을 확인하고, 유효하지 않은 경우에는 아무 것도하지 않고 유효하지 않은 경우 이전 값을 할당합니다. 값이 유효하지 않은 경우 이전 값을 할당하면 속성이 업데이트되지만 UserControl
의 내 TextBox
에 업데이트 된 값이 표시되지 않습니다. 아무도 그 이유를 말할 수 있습니까? 내 UserControl
의WPF : TextBox 텍스트가 업데이트되지 않습니다.
XAML의 :
<UserControl x:Name="usercontrol">
<StackPanel>
<TextBlock ......./>
<TextBox Binding={Binding ElementName=usercontrol, Path=Value, Mode=TwoWay}/>
</StackPanel>
</UserControl>
값 뒤에 코드에서이있는 DependencyProperty
DataTemplate
이 사용하고
:
<HierarchicalDataTemplate DataType="{x:Type myLib:myClass}" ItemsSource="{Binding Children}">
<Expander Header="{Binding}">
<WrapPanel>
<edproperty:TextPropertyEditor Caption="Name" Value="{Binding Name, Mode=TwoWay}"/>
<edproperty:TextPropertyEditor .................../>
<edproperty:TextPropertyEditor .................../>
<edproperty:TextPropertyEditor ...................../>
</WrapPanel>
</Expander>
</HierarchicalDataTemplate>
나는이 템플릿 TreeView
에서 사용. TreeView
안에 TextBox
값을 입력합니다. 값의 UserControl
속성을 업데이트합니다. 의 속성을 변경합니다. PropertyChangedCallback
를 에 할당합니다. 이름myClass
의 속성으로 일부 유효성 검사를 수행하고 OldValue
을 재 할당합니다. 유효성 검사가 실패하면. 그것은 차례로 값 속성을 업데이트하지만 여전히 TextBox
이 이전에 입력 한 것과 같은 값을 가지고 있다는 것을 계속보고 있습니다.
public string Name
{
get
{
return (string)GetValue(NameProperty);
}
set
{
SetValue(NameProperty, value);
}
}
// Using a DependencyProperty as the backing store for Name. This enables animation, styling, binding, etc...
public static readonly DependencyProperty NameProperty =
DependencyProperty.Register("Name", typeof(string), typeof(myClass), new UIPropertyMetadata(null, OnNameChanged));
protected static void OnNameChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args)
{
if(checkRequired && !IsValid(e.NewValue.ToString()))
{
checkRequired=false;
(sender as myClass).Name = args.OldValue.ToString();
}
}
private static bool IsValid(string name)
{
.............some logic here
}
코드를 보지 않고도 적절하게 의견을 말하기는 어려울 것입니다. 코드를 올리실 수 있습니까? –
너무 많아서 게시 할 수 없습니다. 더 자세한 설명이 필요한지 물어볼 수 있습니다. – viky
아니, 당신은 재현 할 최소한의 코드 조각을 쓸 수 있습니다 ... 그렇지 않으면, 우리는 추측, 응답하지 것입니다. 아무도 불확실성을 좋아하지 않습니다. 특히 프로그래머 .. – Anvaka