문제

나는 물체가있다 Person, 가지고 있는데 FirstName 그리고 LastName 속성.

내 wpf ui에는 a가 있습니다 Label 전체 이름으로 바인딩해야합니다.

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

다음과 같은 다른 읽기 전용 속성을 만들고 싶지 않습니다.

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

이 두 속성을 XAML에서 어떻게 연결하려면 어떻게해야합니까?

도움이 되었습니까?

해결책

몇 가지 옵션 :

옵션 1 : 멀티 핀딩이있는 단일 텍스트 블록 (또는 레이블) :

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

옵션 2 : 수평 스택 패널의 다중 텍스트 블록 (또는 레이블) :

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

개인적으로 나는 옵션 1과 함께 갈 것입니다.

다른 팁

나는 Matt가 설명한 멀티 핀딩 접근법을 좋아합니다. 그러나 응용 프로그램의 아키텍처에 따라 만들고 싶지 않은 풀 이름 속성을 생성하는 것은 똑같이 유효한 (그리고 더 바람직한) 선택입니다.

Model-View-ViewModel을 사용하는 경우 뷰에 바인딩 할 목적으로 단독으로 풀 이름 속성을 노출시키는 뷰 모델이 있습니다.

예를 들어, 요구 사항이 갑자기 변경되어 첫 번째 + last 또는 last로 포맷 할 수 있어야하는 경우 먼저 구성 설정에 따라 ViewModel에서 수행하기가 훨씬 쉽습니다. 마찬가지로, FirstName 또는 LastName으로의 변경이 FullName의 적절한 변경을 유효성을 확인하기 위해 단위 테스트를 작성하면 Straight XAML 접근법을 사용하여 실용적이지 않습니다.

그러나 내가 말했듯이 모든 것이 응용 프로그램의 아키텍처에 달려 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top