2016-06-27 1 views
1

ProgressRingTextBlockがあります。この基本的なハックを実装しようとしています.TextBlockのTextに値(null以外の値)が割り当てられたときに両方の要素を表示します。 TextBlockのTextがnullの場合は、両方の要素が非表示になります。文字列から可視性へのコンバータの実装方法

私のXamlは以下のようになります。 TextBlockのテキストMessageForProgressRingにバインドされ、その可視性MessageForProgressRingとの両方にバインドされます。すべての私のViewModelBase(親に、しかし

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

:私はちょうどプロパティを誘発し、それにいくつかのボタンのイベントハンドラに値を割り当てるの後ろのコードで次に

<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> 

、:私ProgressRingに同じ私のビューモデル)のエラーメッセージが表示されます:

要求された値 '閉鎖...'が見つかりませんでした。

私は可視性Closing...右にバインドされているので、私は、コンバータが必要だと思いますか?はいの場合はどうしたらいいですか?

P. OnPropertyChangedにはvalueが割り当てられていないため、私はできませんでした。また、実行前、実行中、実行後の大きな時間と呼ばれるので、良い考えではないと思います。

+0

あなたはこれに関する調査をしましたか? 'wpf IValueConverter'の簡単なgoogle検索では、[this one](http://wpftutorial.net/ValueConverters.html)のようなサンプルとチュートリアルがたくさんあります。 –

+0

@Charlesええ、一度私はキーワード(IValueConverter?)が分かっています。ありがとう私はそれを見ている –

+0

私の検索は、おそらくあまりにも特定された、私はリンク先のチュートリアルは、 'wpfコンバータ'の最初のヒットです。あなたはそれを見ていなかったと思って、おそらく私を許すことができます! –

答えて

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

クールです。私はそれをやっている)))) –

関連する問題