2010-01-05 3 views
4

개체가 Person이고 FirstNameLastName 속성이 있습니다.XAML 바인딩 문자열 연결

public string FullName { get { return FirstName + " " + LastName; } } 

: 내가 좋아하는 또 다른 읽기 전용 속성을 만들지 않으

<Label Binding="{Binding FullName}" /> 

: 내 WPF UI에서

, 전체 이름에 결합 할 필요가있는 Label이 XAML에서이 두 속성을 어떻게 연결할 수 있습니까?

답변

10

옵션의 몇 :

옵션 1 : MultiBinding 단일 TextBlock의 (또는 라벨) :

<TextBlock> 
    <TextBlock.Text> 
     <MultiBinding StringFormat="{}{0} {1}"> 
      <Binding Path="FirstName" /> 
      <Binding Path="LastName" /> 
     </MultiBinding> 
    </TextBlock.Text> 
</TextBlock> 

옵션 2 : 수평 StackPanel에있는 여러 TextBlocks (또는 레이블) :

<StackPanel Orientation="Horizontal"> 
    <TextBlock Text="{Binding FirstName}" /> 
    <TextBlock Text=" " /> 
    <TextBlock Text="{Binding LastName}" /> 
</StackPanel> 

개인적으로 옵션 1을 사용합니다.

+2

+1 멀티 바인딩 용. 그것은 너무 낮게 평가 받았습니다. – Josh

+0

나는 옵션 1을 따를 것이다. 답변에 감사드립니다. – Manohar

+0

한가지 더 매트, 어떻게 DatagridComboBoxColumn의 경우 fullname을 표시 할 수 있습니까? 다음 XAML 에서처럼. DisplayMemberPath = "FirstName" SelectedItemBinding = "FirstName" Manohar

4

나는 멀티 바인딩 ap를 좋아합니다. 마하트는 설명했다. 그러나 응용 프로그램의 아키텍처에 따라 생성하지 않으려는 FullName 속성을 만드는 것이 똑같이 유효하고 틀림없이 더 바람직한 선택이기도합니다.

Model-View-ViewModel을 사용하는 경우 View에 바인딩하기위한 용도로만 FullName 속성을 표시하는 ViewModel이 있습니다.

예를 들어 요구 사항이 갑자기 변경되어 구성 설정에 따라 First + Last 또는 First, First로 서식을 지정할 수 있어야하는 경우 ViewModel에서 훨씬 쉽게 수행 할 수 있습니다. 마찬가지로 FirstName 또는 LastName의 변경으로 인해 FullName이 적절히 변경되었는지 확인하는 단위 테스트를 작성하는 것은 직접 XAML 방식을 사용하면 실용적이지 않습니다.

하지만 내가 말했듯이 모든 것은 응용 프로그램의 아키텍처에 따라 다릅니다.

+0

필자는 코드 포스트 (예 : MVVM)에서이를 수행하는 것에 대해 거의 내 게시물에 포함 시켰습니다. 그래서 +1. 상호 존경 사회 또는 무엇? :) –

+0

우리는 MVVM 패턴을 사용하고 있습니다. 이 경우, 내 UI에서 FullName 열 DataGrid가 있습니다. 이 DataGrid의 ItemsSource는 Person의 ObservableCollection입니다. 그래서 난 정말 내 ViewModel에 FullName을 가질 수 없습니다. 답장을 보내 주셔서 감사합니다.. – Manohar