也許我不太理解多重綁定。數據綁定到multibinding的值
我有一個名爲OfficeDisplayName的viewmodel屬性寫入數據庫。
這是一個基於人名字,姓氏和辦公地點的連接字段。
所以我有一個textBlock的多重綁定...沒有biggie ...工作得很漂亮......但我如何將這個連接的完整值綁定到OfficeDisplayName屬性?我是否必須有一個隱藏的元素綁定到多行文本框?我已經看到幾個幾乎與我需要的例子,但是不回答concat數據綁定問題。
也許我不太理解多重綁定。數據綁定到multibinding的值
我有一個名爲OfficeDisplayName的viewmodel屬性寫入數據庫。
這是一個基於人名字,姓氏和辦公地點的連接字段。
所以我有一個textBlock的多重綁定...沒有biggie ...工作得很漂亮......但我如何將這個連接的完整值綁定到OfficeDisplayName屬性?我是否必須有一個隱藏的元素綁定到多行文本框?我已經看到幾個幾乎與我需要的例子,但是不回答concat數據綁定問題。
一種方法是直接讓文本塊結合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
}
好吧......這真的讓我開始,所以我投了你。然而......嘿嘿......我需要將這個值保存到數據庫中,但同時確保我正在從數據庫中讀取準確的值......所以我必須在setter中做一些事情......我我想從長遠來看,我可能不得不通過視圖模型。 – ecathell 2010-07-22 19:05:28
+1爲此 - <! - 傳遞datacontext作爲第一個參數 - > –
akjoshi
2010-07-23 11:03:34