[英]Binding a bool to button visibility
我在這個問題中都遵循了兩個示例,但是我無法將視圖模型中的布爾值綁定到視圖中的按鈕。 我正在使用另一個按鈕來切換另一個按鈕是否應該可見,任何人都可以看到問題所在嗎?
目前,我正在嘗試將布爾值綁定到按鈕的可見性,即使我已經測試過布爾值在True / False之間切換,這也無法正常工作。 我使用的另一種方法是使用數據觸發器來更改可見性。 我已注釋掉此方法,因為它不起作用。
視圖
<Button Canvas.Left="300" Canvas.Top="235" Click="ShowEquipmentItems" Cursor="Hand" Visibility="{Binding ShowButtons, Converter={StaticResource BooleanToVisibilityConverter}}">
<Button.Style>
<Style TargetType="{x:Type Button}">
<Setter Property="Content">
<Setter.Value>
<StackPanel>
<Image Source="../Images/Green spot icon.png" Height="35" Width="35" />
</StackPanel>
</Setter.Value>
</Setter>
<Setter Property="Visibility" Value="Collapsed"/>
<!--<Style.Triggers>
<DataTrigger Binding="{Binding ShowButtons}" Value="True">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>-->
</Style>
</Button.Style>
</Button>
<Button Canvas.Right="10" Canvas.Top="388" Command="{Binding ToggleButtonCommand}" Cursor="Hand" Height="50" Width="50" />
查看模型
public class CabinViewViewModel : BindableBase, ICabinViewViewModel
{
public bool ShowButtons { get; set; }
public DelegateCommand ToggleButtonCommand { get; private set; }
public CabinViewViewModel()
{
ToggleButtonCommand = new DelegateCommand(ToggleButtons, CanToggleButtons);
ShowButtons = true;
}
public void ToggleButtons()
{
ShowButtons = !ShowButtons;
System.Console.WriteLine("Toggle Buttons" + ShowButtons.ToString());
}
public bool CanToggleButtons()
{
return true;
}
}
顯然,@ mm8的答案同樣有效,但恕我直言,更干凈的方法是使用BooleanToVisibilityConverter,如下所示:
<Button Visibility="{Binding ShowButtons, Converter={StaticResource BooleanToVisibilityConverter}}">
也節省了很多代碼,並且更易於閱讀。
不要設置本地Visibility
屬性:
<Button Canvas.Left="300" Canvas.Top="235" Click="ShowEquipmentItems" Cursor="Hand">
<Button.Style>
<Style TargetType="{x:Type Button}">
<Setter Property="Content">
<Setter.Value>
<StackPanel>
<Image Source="../Images/Green spot icon.png" Height="35" Width="35" />
</StackPanel>
</Setter.Value>
</Setter>
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ShowButtons}" Value="True">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
如文檔中所述,本地值優先於樣式設置器: https : //docs.microsoft.com/zh-cn/dotnet/framework/wpf/advanced/dependency-property-value-precedence
您還應該在視圖模型中ShowButtons
屬性的PropertyChanged
事件:
public class CabinViewViewModel : BindableBase, ICabinViewViewModel
{
private bool _showButtons;
public bool ShowButtons
{
get { return _showButtons; }
set { SetProperty(ref _showButtons, value); }
}
...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.