2016-04-24 29 views
0

我想結合2種方式爲什麼我的2路綁定不行

在我的ViewModel,我有

private Temporary _selectedCompany; 
    public Temporary SelectedCompany 
    { 
     get 
     { 
      return this._selectedCompany; 
     } 
     set 
     { 
      if (this._selectedCompany == value || value == null) 
       return; 

      this._selectedCompany = value; 
      this.SelectedCompany.CompanyName = "TestName"; 
      base.OnPropertyChanged("SelectedCompany"); 
     } 
    } 

Temporary其實就是類似於你會爲做一個類的類公司地址(姓名,國家,電話等),由EntityFramework創建。

在相應的視圖中,XAML是

<local:CompanyDetail CompanyName="{Binding SelectedCompany.CompanyName}"/> 

在代碼中的自定義控制

// Dependency Property 
    public static readonly DependencyProperty CompanyNameProperty = 
     DependencyProperty.Register("CompanyName", typeof(string), 
     typeof(CompanyDetail), null); 

    // .NET Property wrapper 
    public string CompanyName 
    { 
     get { return (string)GetValue(CompanyNameProperty); } 
     set { SetValue(CompanyNameProperty, value); } 
    } 

的背後有沒有在視圖模型。有以下XAML

<TextBox Text="{Binding CompanyName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, RelativeSource={RelativeSource AncestorType=UserControl, AncestorLevel=1, Mode=FindAncestor}}" /> 

所以,當控件加載並顯示在屏幕上,我看到了值「測試名」的TextBox但是,如果我通過鍵入更改值,然後單擊OK按鈕我可以看到該值尚未更新。

我假設它與INotifyPropertyChanged無關,因爲我認爲這是所有參考類型的任何方式?

我在做什麼錯?

+0

你肯定AncestorLevel = 1?你不需要指定它,如果你指定AncestorType –

回答

1

公司名稱綁定必須進行雙向的,無論是顯式地設置

<local:CompanyDetail 
    CompanyName="{Binding SelectedCompany.CompanyName, Mode=TwoWay}"/> 

或通過聲明依賴屬性默認爲雙向綁定

public static readonly DependencyProperty CompanyNameProperty = 
    DependencyProperty.Register(
     "CompanyName", typeof(string), typeof(CompanyDetail), 
     new FrameworkPropertyMetadata(
      null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault)); 
+0

你真的是一個非常聰明的人。這是你幫助過的幾周內第二次。謝謝 – MyDaftQuestions

相關問題