這是我如何解決這個問題(我回答我的問題)。
首先這裏是我使用的Multibinding類型轉換器:
public class CombineFullNameAndPhoneExtensionMultiConverter : IMultiValueConverter
{
public object Convert(object[] values,
Type targetType,
object parameter,
System.Globalization.CultureInfo culture)
{
if (values[0] as string != null)
{
string fullName = (string)values[0] ?? "Unknown";
string phoneExtension = (string)values[1] ?? "Unknown";
string namePlusExtension = fullName.Trim() + " Phone: " + phoneExtension.Trim();
return namePlusExtension;
}
return null;
}
public object[] ConvertBack(object value,
Type[] targetTypes,
object parameter,
System.Globalization.CultureInfo culture)
{
NotesContact c = (NotesContact)value;
string[] returnValues = { c.FullName.Trim(), c.PhoneExtension.Trim() };
return returnValues;
}
}
public class CombineLastNameFirstNameAndPhoneExtensionMultiConverter : IMultiValueConverter
{
public object Convert(object[] values,
Type targetType,
object parameter,
System.Globalization.CultureInfo culture)
{
if (values[0] as string != null)
{
string lastName = (string)values[0] ?? "Unknown";
string firstName = (string)values[1] ?? "Unknown";
string phoneExtension = (string)values[2] ?? "Unknown";
string lastCommaFirstPlusExtension = lastName.Trim() + ", " + firstName.Trim() + " Phone: " + phoneExtension.Trim();
return lastCommaFirstPlusExtension;
}
return null;
}
public object[] ConvertBack(object value,
Type[] targetTypes,
object parameter,
System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
下面是XAML的轉換聲明:
<local:CombineFullNameAndPhoneExtensionMultiConverter x:Key="combinedFullNameAndPhoneExtensionConverter"/>
<local:CombineLastNameFirstNameAndPhoneExtensionMultiConverter x:Key="combinedLastNameFirstNameAndPhoneExtensionConverter"/>
現在,這裏是ComboBox XAML:
<telerik:GridViewComboBoxColumn Name="contactsGridViewComboBox" Header="Contact"
ItemsSource="{Binding ContactListObservable, RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}}">
<telerik:GridViewComboBoxColumn.CellTemplate>
<DataTemplate>
<TextBlock>
<TextBlock.Text>
<MultiBinding Converter="{StaticResource combinedFullNameAndPhoneExtensionConverter}">
<Binding Path="FullName"/>
<Binding Path="PhoneExtension"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</DataTemplate>
</telerik:GridViewComboBoxColumn.CellTemplate>
<telerik:GridViewComboBoxColumn.CellEditTemplate>
<DataTemplate x:Name="ContactsCellEditTemplate">
<Grid FocusManager.FocusedElement="{Binding ElementName=ContactsTemplateComboBox}">
<telerik:RadComboBox x:Name="ContactsTemplateComboBox" IsSynchronizedWithCurrentItem="False" IsEditable="False" ItemsSource="{Binding ContactListObservable, RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}}" IsDropDownOpen="True" TextSearchMode="Contains" IsFilteringEnabled="True" OpenDropDownOnFocus="True">
<telerik:RadComboBox.SelectedItem>
<MultiBinding Converter="{StaticResource combinedFullNameAndPhoneExtensionConverter}">
<Binding Path="FullName" UpdateSourceTrigger="PropertyChanged"/>
<Binding Path="PhoneExtension" UpdateSourceTrigger="PropertyChanged"/>
</MultiBinding>
</telerik:RadComboBox.SelectedItem>
<telerik:RadComboBox.ItemTemplate>
<DataTemplate>
<TextBlock DataContext="{Binding}">
<TextBlock.Text>
<MultiBinding Converter="{StaticResource combinedLastNameFirstNameAndPhoneExtensionConverter}">
<Binding Path="LastName"/> <Binding Path="FirstName" />
<Binding Path="PhoneExtension"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</DataTemplate>
</telerik:RadComboBox.ItemTemplate>
</telerik:RadComboBox>
</Grid>
</DataTemplate>
</telerik:GridViewComboBoxColumn.CellEditTemplate>
通知我利用了Multibinding,CellTemplate(獲取或設置數據模板在視圖模式的細胞)和CellEditTemplate(獲取或設置數據模板,在編輯模式下電池)。由於我已經沒時間了,我讓代碼爲自己說話。如果您需要一些澄清,請留下評論或發佈新的堆棧溢出問題,如果這太混亂。我非常感謝SO社區。你搖滾!
我想綁定是雙向的。姓名和電話被保存到單獨的數據庫字段。所以在轉換器,我需要ConvertBack代碼? – DeveloperDan 2013-02-21 15:28:03
你可以很容易地從你選擇的項目中提取它們,我認爲將有任何需要轉換回來。 – ethicallogics 2013-02-21 15:54:19
如何編寫GridViewComboBox綁定語句,以便在用戶選擇聯繫人時將它綁定到FullName和PhoneExtension字段? – DeveloperDan 2013-02-21 16:26:05