2016-06-27 57 views
1

所以我有一個ProgressRingTextBlock我試圖實現這個基本的黑客,這是顯示兩個元素時,TextBlock的文本被賦予一個值(非空的任何東西),否則當TextBlock的文本爲空時,這兩個元素應該隱藏。如何實現轉換器從字符串到可見性

我的Xaml如下所示。 TextBlock的文本綁定爲MessageForProgressRing,其可見性綁定到MessageForProgressRingTargetNullValue。我也一樣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> 

然後,在後面的代碼我只是觸發的財產,併爲其分配一個值上的一些按鈕事件處理:

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

然而,在我ViewModelBase(所有的父我的觀點模型)它彈出一個錯誤OnPropertyChanged說:

未找到請求值'正在關閉...'。

我想我需要一個轉換器,因爲能見度被綁定到Closing...吧?如果是,我怎麼能實現它?

P.S我不能在OnPropertyChanged中這樣做,因爲我沒有看到value分配給它。另外我不認爲這是一個好主意,因爲它在執行前,執行期間和執行後被稱爲大時間。

+0

你有沒有對此做過任何研究?一個簡單的谷歌搜索'wpf IValueConverter'會爲你提供大量的例子和教程,例如[this one](http://wpftutorial.net/ValueConverters.html)。 –

+0

@Charles是的,但一旦我知道什麼是關鍵字(IValueConverter?)。謝謝我正在看它 –

+0

我的搜索可能過於具體,我鏈接到的教程是'wpf轉換器'的第一個命中。你可能原諒我以爲你沒有看過它! –

回答

3

我通常更喜歡通過在我的視圖模型中具有布爾屬性來解決此問題(例如,HasMessageForProgressRing或IsProgressRingVisible)。它通常是一個更通用的解決方案。然後你可以使用BooleanToVisibilityConverter

如果你真的想要實現一個轉換器,只需創建一個實現IValueConverter的類。這應該是你的簡單使用案例的一塊蛋糕。大多數情況下不需要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

很酷。我這樣做))) –