2010-07-05 5 views
1

itemscontrol에 여러 개의 textblocks가 있습니다 ... 데이터 모델의 목록에서 텍스트를 사용할 수 있는지 여부에 따라 텍스트 블록에 텍스트에 밑줄을 긋는 방법을 알아야합니다.WPF : 조건부 텍스트 블록 템플리트

나는이 목적을 위해 datatriggers 및 valueconverters를 사용할 수 ...

은 나에게 매우 간단한 소리 ...하지만 지난 8 시간 이후 인터넷 검색을 한? 그렇다면 viewModel (데이터 모델 목록에 주어진 텍스트를 확인하는 데 도움이되는 메서드)에있는 메서드를 어떻게 실행할 수 있습니까?

조건부 템플릿을 사용하더라도. ... 내 모델에있는 목록에 액세스하려면 어떻게해야합니까 (뷰 모델은 가져올 수 있지만 뷰 모델에 액세스하려면 어떻게해야합니까?) ...

이 작업은 매우 쉬운 작업입니다. . 나는 정말로 여기에 아주 간단한 것을 놓친다. ?? 내 응용 프로그램에 대한 MVVM 패턴을 .. 다음입니다

:

+0

난 당신이 컨버터를 사용하지 않고 컨버터를 사용하여 그것을 열심히해야한다고 생각합니다. – akjoshi

+0

예 ... 저는 변환기를 작성했지만 그 목록에 연결하는 것은 아닙니다 ... 저는 정말로 무언가를 강요하고 싶지 않습니다 .... 더 쉬운 방법이 될 것입니다 ... –

답변

1

한 가지 방법은 IMultiValueConverter를 구현하는 클래스 인 multivalueconverter를 사용하는 것입니다. 다중 값 변환기를 사용하면 여러 값에 바인딩 할 수 있습니다. 즉, 값 변환기에있는 TextBlock의 텍스트와 뷰 모델 모두에 대한 참조를 얻을 수 있습니다. 당신은이 valueconverter을 사용할 수 있습니다

class UnderlineValueConverter : IMultiValueConverter 
{ 
    #region IMultiValueConverter Members 

    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     var viewmodel = values[0] as Window1ViewModel; 
     var text = values[1] as string; 
     return viewmodel.GetIsUnderlined(text) ? TextDecorations.Underline : null; 
    } 

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter,  System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 

    #endregion 
} 

:

당신의 ViewModel은 텍스트가 valueconverter이 라인을 따라 구현 될 수 밑줄해야하는지 여부를 나타내는 true 또는 false를 반환 GetIsUnderlined라는 메소드를 가지고 있다고 가정 TextBlock에 대한 길을 :