2009-10-20 59 views
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。

回答

1

在您的用戶控件中,您無法知道文本框中的值何時更新。您需要在tbItem文本框中爲TextChanged事件添加事件處理程序,然後使用新值設置Value屬性的值。

+0

感謝Bryant的迴應。 我認爲這將是類似的東西,但認爲這有點不可思議,因爲在擁有的ValueChanged (源作爲FormItem_TextBox).tbItem.Text = e.NewValue.ToString(); ...哪種感覺就像我要循環往復一樣;你懂我的意思嗎? 無論如何,你建議的作品,所以這就是最重要的!謝謝。 – ETFairfax 2009-10-23 10:48:49

+0

ValueChanged從VM到控件。 TextChanged處理程序用於返回其他方向。 – Bryant 2009-10-23 16:20:42