2016-08-31 57 views
0

我有一個ListView以及必須完成的所有類型的任務。當任務完成時,用戶按下列表視圖中的項目。這改變了我的web api中的布爾值。現在,當我從API獲取所有項目時,我想在已完成的項目上顯示一個檢查符號。UWP當布爾值爲真時顯示一個檢查符號

<SymbolIcon Grid.Column="0" x:Name="CompleteTask" Symbol="Accept"/> 
<TextBlock Name="TaakNaam" 
    Grid.Column="1" 
    Text="{x:Bind TaskName}" 
    FontSize="16"/> 

What it should be

回答

0

我建立這個轉換器:

public class BooleanToVisibilityConverter : IValueConverter 
{ 
    public BooleanToVisibilityConverter() 
    { 
    } 

    public object Convert(object value, Type targetType, object parameter, string language) 
    { 
     if (value is bool && (bool) value) 
     { 
      return Visibility.Visible; 
     } 
     return Visibility.Collapsed; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, string language) 
    { 
     return (value is Visibility && (Visibility)value == Visibility.Visible); 
    } 
} 

而在我的視圖導入這樣的:

<Page.Resources> 
    <vm:BooleanToVisibilityConverter x:Key="BoolToVis" /> 
</Page.Resources> 

比我添加了一個結合到我SymbolIcon:

<SymbolIcon Grid.Column="0" x:Name="CompleteTask" Symbol="Accept" Foreground="Green" Visibility="{Binding Path=Check, Converter=StaticResource BoolToVis}}"/> 

來源:https://pmdevweb.wordpress.com/2016/05/24/uwp-binding-boolean-to-visibility/

0

你可以寫屬性

public Visibility TickVisibility 
{ 
    get {return YourBoolean == true ? Visibility.Visible : Visibility.Collapsed;} 
} 

,並將其綁定:

<SymbolIcon Grid.Column="0" x:Name="CompleteTask" Symbol="Accept" Visibility={Binding TickVisibility}/> 

或使用NotifyProperty每次YourBoolean改變 或寫入器將實施的IValueConverter並將轉換bool < =>可見性

+0

OP使用'x:Bind'。什麼是使用'綁定'而不是(如果有的話)? – IInspectable

+0

其實應該沒有區別(在這種情況下不會有)。它可以被綁定到x:綁定,但我個人更喜歡綁定 - 因爲它與NVVM更相關,看起來更好。 – RTDev

+0

有顯着差異。首先,'x:Bind'和'Binding'不能互換使用。另一方面,他們有不同的默認模式。最後,但當然並非最不重要的一點,在編譯時檢查'x:Bind',產生編譯器錯誤(而'Binding'將在運行時失敗)。有關詳細信息,請參見[深度數據綁定](https://msdn.microsoft.com/windows/uwp/data-binding/data-binding-in-depth)。你必須有一個非常好的**理由來選擇綁定到x:綁定(*個人偏好*不是一個好理由)。 – IInspectable

相關問題