2014-12-18 3 views
2

У меня есть строка, как показано ниже.Сочетание текста с данными

string someInfo = string.Format("First Name = {0}, Last Name = {1}",firstName, lastName); 

Эта строка должна отображаться в приложении с использованием TextBlock. Первые и последние имена поступают из базы данных, поэтому я хотел бы использовать привязки данных для этого. Можно ли это сделать?

ответ

2

Да, возможно.

Однако, поскольку у вас есть несколько привязок, вам необходимо привязать к MultiBinding (MSDN).

Ваши связывания выглядит следующим образом:

<TextBlock.Text> 
    <MultiBinding Converter="{StaticResource NameConverter}"> 
     <Binding Path="FirstName"/> 
     <Binding Path="LastName"/> 
    </MultiBinding> 
    </TextBlock.Text> 

С MultiValueConverter:

public class NameConverter : IMultiValueConverter 
{ 
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
    { 
     return string.Format("First Name = {0}, Last Name = {1}", values[0], values[1]); 
    } 
    public objct ConvertBack(...) 
    { 
     return Binding.DoNothing; 
    } 
} 
+0

Я использую это в объекте страницы, и не кажется, что я могу объявить Windows.Resources на странице XAML. Есть идеи? – BKS

+1

@johnsmith Как насчет '' :) – BradleyDotNET

+0

С помощью Я получаю "Префикс пространства имен" Конвертер " не определен". Как узнать, какое пространство имен должно быть связано с конвертером? – BKS

1

Я не знаю, используется ли шаблон MVVM. если вы просто определить свойство в вашем ViewModel

public string Someinfo 
{ 
get { return string.Format("First Name = {0}, Last Name = {1}",firstName, lastName);} 
} 

, а затем использовать Binding в вашем Xaml

<TextBlock Text={Binding Path Someinfo} /> 

Я бы сказал, что это «чище», чем делать это в вашем XAML.

+1

Хотя это разумный способ сделать это, вам нужно учитывать дополнительную сложность в повышении INotifyPropertyChanged. – BradleyDotNET

1

да возможно

public string SomeInfo { get; set; } 
     public MainWindow() 
     { 
      InitializeComponent(); 
      SomeInfo = GetFirstNameAndLastNameFromDataBase(); 
      DataContext = this; 
     } 

     private string GetFirstNameAndLastNameFromDataBase() 
     { 
      string firstName = "firstName"; 
      string lastName = "lastName"; 

      return string.Format("First Name = {0}, Last Name = {1}", firstName, lastName); 
     } 



<Window x:Class="BindingToTextBlock.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <TextBlock Text="{Binding SomeInfo, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"></TextBlock> 
    </Grid> 
</Window> 
Смежные вопросы