2010-07-22 28 views
2

也許我不太理解多重綁定。數據綁定到multibinding的值

我有一個名爲OfficeDisplayName的viewmodel屬性寫入數據庫。

這是一個基於人名字,姓氏和辦公地點的連接字段。

所以我有一個textBlock的多重綁定...沒有biggie ...工作得很漂亮......但我如何將這個連接的完整值綁定到OfficeDisplayName屬性?我是否必須有一個隱藏的元素綁定到多行文本框?我已經看到幾個幾乎與我需要的例子,但是不回答concat數據綁定問題。

回答

7

一種方法是直接讓文本塊結合OfficeDisplayName然後把串聯邏輯在OfficeDisplayName財產上的視圖模型,而不是在MultiValueConverter。因此,如果有一個屬性的名字,姓氏或辦公地點發生變化,您將觸發PropertyChanged事件OfficeDisplayName - 即沿着以下幾行。這樣,你就不會需要一個轉換器都:

class YourViewModel : ViewModel 
{ 
    string _firstName; 

    public string FirstName 
    { 
     get { return _firstName; } 
     set 
     { 
      if (_firstName != value) 
      { 
       _firstName = value; 
       OnPropertyChanged("FirstName"); 
       OnPropertyChanged("OfficeDisplayName"); 
      } 
     } 
    } 

    // More properties here 
    // ... 

    public string OfficeDisplayName 
    { 
     get { return String.Join(" ", new string[] { _firstName, _lastName, _officeLocation}); } 
    } 
} 

另一種方式是通過自己的視圖模型作爲參數傳遞給你的MultiValueConverter。在您的轉換器中,您可以直接設置值OfficeDisplayName。我認爲這種方式有點「黑客」,但這是一個品味問題。您的代碼將如下所示:

在XAML綁定:

<MultiBinding Converter="{StaticResource theConverter}" Mode="OneWay"> 
    <Binding /> <!-- Pass the datacontext as the first parameter --> 
    <Binding Path="FirstName" /> 
    <Binding Path="LastName" /> 
</MultiBinding> 

轉換器:

class TheMultiValueConverter : IMultiValueConverter 
{ 
    #region IMultiValueConverter Members 

    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     var viewModel = values[0] as TheViewModel; 
     var ret = String.Join(" ", values.Skip(1).Cast<string>().ToArray()); 
     viewModel.OfficeDisplayName = ret; 
     return ret; 
    } 

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 

    #endregion 
} 
+0

好吧......這真的讓我開始,所以我投了你。然而......嘿嘿......我需要將這個值保存到數據庫中,但同時確保我正在從數據庫中讀取準確的值......所以我必須在setter中做一些事情......我我想從長遠來看,我可能不得不通過視圖模型。 – ecathell 2010-07-22 19:05:28

+1

+1爲此 - <! - 傳遞datacontext作爲第一個參數 - > – akjoshi 2010-07-23 11:03:34