2017-09-05 42 views
0

我是UWP/XAML的新手,我已經發現了一些關於此主題的文章,但在我的案例中該解決方案只能工作一次。不幸的是,我不允許張貼截圖,所以會嘗試解釋它。 我有兩個按鈕,其中輸入/輸出工人。兩者都綁定到一個命令對象。如果沒有工人「登錄」,則兩個按鈕均被禁用。如果有工人,並且他沒有進入鐘錶,ClockInButton被啓用並且ClockOutButton被禁用,反之亦然。這就像一個魅力!將啓用/禁用的命令按鈕轉換爲可見/不可見

<Button x:Name="ClockInButton" Command="{x:Bind ViewModel.ClockInCommand, Mode=OneWay}" ...></Button> 
<Button x:Name="ClockOutButton" Command="{x:Bind ViewModel.ClockOutCommand, Mode=OneWay}...>"</Button> 

如果ViewModel更改CanExecuteChanged-Event引發並且按鈕更新正確。 現在我想不只是啓用/禁用按鈕,而是將它們設置爲可見/不可見,以便我們可以在同一個位置顯示它們,這爲我們節省了一些空間(我們在車間只有23個「設備」),所以我將它添加到了我的。按鈕

Visibility="{x:Bind ViewModel.IsWorkerClockedIn, Converter={StaticResource VisibilityConverter}, Mode=OneWay}" 

這是我的轉換代碼(感謝AlexDrenea的提示):

public class BoolToVisibilityConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, string language) 
    { 
     bool enabled = (bool)value; 

     if (enabled) 
     { 
      return Visibility.Visible; 
     } 
     else 
     { 
      return Visibility.Collapsed; 
     } 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, string language) 
    { 
     throw new NotImplementedException(); 
    } 
} 

這工作正常我啓動應用程序時沒有工人「登錄」。所以沒有按鈕是可見的,但是如果工作人員登錄,他們將保持不可見狀態:-(。所有的事件都是(現在)被正確提升。 我必須寫我的擁有「代碼隱藏」還是有辦法滿足XAML的要求?

問候, 尼爾斯

+0

編輯: 我錯了關於這些事件我忘了提高PropertyChanged-Event但它仍然不起作用我調試了轉換器現在每次都調用它該屬性發生了變化,我懷疑可見性是在命令綁定啓用其中一個按鈕之前設置的,在這兩種情況下,轉換器內部的bool「enabled」都是「false」。 – nilsk

+0

是因爲'Mode = OneWay'? – Lindsay

+0

嗯i認爲「單向」是可以的,模型更新按鈕但不能倒退。 – nilsk

回答

0

確定我是盲人(至少)。按鈕可見性都綁定到相同的屬性,所以他們總是可見或隱形。 因此,如果正確實施,這個想法就可以發揮作用。對於造成的任何不便,我深表歉意:-(