2014-07-17 42 views
0
使用具有WPF和實體框架 MVVM模式和在視圖模型實現INotifyPropertyChanged的和模型使用Multibinding用3 TextBox控件

multibinding不更新源屬性和數據庫

IM

IM, 入境第一文本框先命名爲 SECEND文本框姓氏

和第三文本框的全名

第三文本框使用multibinding:

<TextBox > 
    <TextBox.Text> 
     <MultiBinding Converter="{StaticResource FullNameConverter}"> 
          <Binding Path="PersonData.FullName" Mode="TwoWay"   ValidatesOnDataErrors="True" UpdateSourceTrigger="PropertyChanged"/> 

          <Binding ElementName="FirstNameTextBox" Path="Text" Mode="TwoWay"  UpdateSourceTrigger="PropertyChanged" /> 
          <Binding ElementName="LastNameTextBox" Path="Text" Mode="TwoWay"  UpdateSourceTrigger="PropertyChanged"/> 

         </MultiBinding> 
        </TextBox.Text> 
       </TextBox> 

這是我的轉換器

public class FullNameConverter : IMultiValueConverter 
{ 

    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
    { 
     return string.Format("{0} {1}", values[1], values[2]); 
     } 

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) 
    { 
     return new[] { value }; 
     } 
} 

這項工作完美,名字和姓氏保存到數據庫 而不是全名保存到數據庫multibinding。

但是當進入直接在文本框中全名將數據保存到數據庫

如何解決這個問題呢? 請幫助我 謝謝

回答

2

MultiBinding s不工作的方式,你似乎認爲他們這樣做。您不能使用其中一個來創建新值以保存在數據庫中。它們只能用於爲UI中的顯示創建一個新值。如果你想創建一個新的值在數據庫中保存,那麼你就需要爲在代碼中創建屬性......也許這樣的事情?:

public string Fullname 
{ 
    get { return string.Format("{0} {1}", FirstName, LastName); } 
} 

當然,要做到這一點,你還需要具有名稱爲FirstNameLastName的屬性,這些屬性綁定到前兩個TextBoxES,但是那麼假設無論如何都要這樣做。在這種情況下,你也應該將數據綁定在UI此聚集財產第三TextBox.Text屬性:

<TextBox Text="{Binding FullName}" /> 

請參閱MSDN上的Data Binding Overview頁,以瞭解更多有關如何應該來寫你的WPF代碼。

+0

謝謝謝里登 – user3848454

+0

如果你的問題現在已得到解決,請按照本網站的習慣使用[接受此答案](http://stackoverflow.com/help/someone-answers)。 – Sheridan

0

謝謝sheridan FullName Infact是名和姓的別名。 例如:如果第一個名字是梅西和姓氏是梅西,Multibinding全名=梅西,但是有時我想更改學校名稱爲自定義Nmae,例如:梅西廖氏