2016-06-27 4 views
1

그래서 ProgressRingTextBlock을 가지고 있는데이 기본 해킹을 구현하려고합니다. TextBlock의 Text에 값 (null 이외의 값)이 할당 될 때 두 요소를 모두 표시하려고합니다. 그렇지 않으면 TextBlock의 Text가 null 인 경우 두 요소가 모두 숨겨집니다.문자열을 가시성으로 변환하는 방법

내 Xaml은 다음과 같습니다. TextBlock의 텍스트MessageForProgressRing에 바인드되며 의 표시 여부MessageForProgressRing과 모두에 바인딩됩니다. 같은 날 ProgressRing :

<StackPanel Panel.ZIndex="100" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center"> 
     <mahControls:ProgressRing Height="50" IsActive="True" Width="50" Visibility="{Binding MessageForProgressRing, TargetNullValue=Collapsed, FallbackValue=Visible}" Foreground="White" Margin="0,0,0.2,0" /> 
     <TextBlock Text="{Binding MessageForProgressRing}" Visibility="{Binding MessageForProgressRing, TargetNullValue=Collapsed, FallbackValue=Visible}"/> 
    </StackPanel> 

그런 다음, 코드에서 난 그냥 속성을 트리거 뒤에 어떤 버튼 이벤트 핸들러에 값을 할당 : 모든 내 ViewModelBase (부모에,

private void closeApplicationButtonTask() 
{ 
    ((CaptureViewModel)DataContext).MessageForProgressRing = "Closing... "; 
    Application.Current.MainWindow.Close(); 
} 

그러나 내보기 모델) 의 오류 메시지가 표시됩니다.

요청한 값 '마감 중 ...'찾을 수 없습니다.

나는 가시성이 바로 Closing...에 바인더 제본되어 있기 때문에 내가 변환기를 필요가 있다고 생각? 그렇다면 어떻게 할 수 있습니까?

피. OnPropertyChanged에서 value을 할당 할 수 없어 표시 할 수 없습니다. 또한 실행 전, 실행 중, 실행 후 큰 시간이 걸리므로 좋은 생각이라고 생각하지 않습니다.

+0

이것에 대한 연구를 해본 적이 있습니까? 'wpf IValueConverter'에 대한 간단한 google 검색은 [this one] (http://wpftutorial.net/ValueConverters.html)과 같은 예제와 튜토리얼을 많이 제공합니다. –

+0

@Charles 예,하지만 일단 키워드 (IValueConverter?)가 무엇인지 압니다. 고마워요. 내가보고있다. –

+0

내 검색은 지나치게 구체적이었고, 내가 연계 된 튜토리얼은 'wpf converter'의 첫 번째 히트작이다. 너는 그걸 들여다 보지 않았다는 생각으로 나를 용서할 수있을 것이다! –

답변

3

대개 내보기 모델에서 부울 속성 (예 : HasMessageForProgressRing 또는 IsProgressRingVisible)을 사용하여이 문제를 해결하는 것이 좋습니다. 일반적으로보다 범용적인 솔루션입니다. 그런 다음 BooleanToVisibilityConverter을 사용할 수 있습니다.

변환기를 구현하려면 IValueConverter을 구현하는 클래스를 만드십시오. Convert 구현은 간단한 사용 사례를위한 케이크 조각이어야합니다. ConvertBack은 대부분의 경우 필요하지 않으며 (귀하에게는 포함되지 않습니다). 그러면 다음과 같이 보일 것입니다 :

public class NullToCollapsed : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return value != null ? Visibility.Visible : Visibility.Collapsed; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 
+0

차갑다. 나는 그)))) –