0
DependencyPropertys는 기본적으로 양방향 바인딩을 사용합니까? 어떻게 지정하지 않으면?Silverlight/MVVM에서 사용자 정의 데이터 바인딩
물어 이유는 내가 나에게 문제의 원인이되는 다음과 같은 사용자 컨트롤을 가지고있다...
<UserControl x:Class="SilverlightApplication.UserControls.FormItem_TextBox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
>
<StackPanel Style="{StaticResource FormItem_StackPanelStyle}" >
<TextBlock x:Name="lbCaption" Style="{StaticResource FormItem_TextBlockStyle}" />
<TextBox x:Name="tbItem" Style="{StaticResource FormItem_TextBoxStyle}" />
</StackPanel>
뒤에 코드가있는 것입니다 ...
public partial class FormItem_TextBox : UserControl
{
public static readonly DependencyProperty ValueProperty = DependencyProperty.Register("Value", typeof(string), typeof(FormItem_TextBox), new PropertyMetadata(string.Empty, ValueChanged));
public static readonly DependencyProperty CaptionProperty = DependencyProperty.Register("Caption", typeof(string), typeof(FormItem_TextBox), new PropertyMetadata(string.Empty, CaptionChanged));
public string Value
{
get { return (String)GetValue(ValueProperty); }
set { SetValue(ValueProperty, value); }
}
public string Caption
{
get { return (String)GetValue(CaptionProperty); }
set { SetValue(CaptionProperty, value); }
}
private static void ValueChanged(DependencyObject source, DependencyPropertyChangedEventArgs e)
{
(source as FormItem_TextBox).tbItem.Text = e.NewValue.ToString();
}
private static void CaptionChanged(DependencyObject source, DependencyPropertyChangedEventArgs e)
{
(source as FormItem_TextBox).lbCaption.Text = e.NewValue.ToString();
}
public FormItem_TextBox()
{
InitializeComponent();
}
}
내 페이지에서 이와 같은 컨트롤을 사용합니다 ....
<UC:FormItem_TextBox Caption="First Name: " Value="{Binding Path=FirstName, Mode=TwoWay}" />
그러나 텍스트 상자에 대한 업데이트는 모델로 전송되지 않습니다.
이 같은 표준 텍스트 상자를 사용하는 경우
....<TextBlock Text="Firstname:"/>
<TextBox Text="{Binding Path=FirstName, Mode=TwoWay}" />
그런 다음 두 가지 방법으로 데이터 바인딩은 perfecly 작동합니다. 어떤 아이디어가 내 통제에 문제가 있습니까?
건배,
ETFairfax.
Bryant에게 감사드립니다. 나는 그것이 뭔가 같을 것이라고 생각했지만, ValueChanged는 (source as FormItem_TextBox) .tbItem.Text = e.NewValue.ToString(); ... 나는 둥근 고리가 될 것 같은 느낌이 들었다. 내가 무슨 뜻인지 안다면? 어쨌든, 당신이 제안한 것, 그것이 모두 중요합니다! 감사. – ETFairfax
ValueChanged는 VM에서 컨트롤에 이르기까지입니다. TextChanged 핸들러는 다른 방향으로 되돌아 가기위한 것입니다. – Bryant