我有一个按钮,可能需要花费很多时间。是一种异步方法,所以这样我就不会阻止UI,但我也想禁用该按钮以避免执行另一个相同的操作。
为此,我禁用了按钮并更改了其背景,以显示正在运行的操作是我单击此按钮时启动的操作。
我有一个转换器,因为在我的View Model中,我有一个bool属性,可以设置动作是否已经启动或动作是否已完成。要将此bool转换为背景颜色,我使用转换器。
嗯,问题是如果我禁用了按钮,则无法使用转换器设置背景。
我想知道如何做到这一点,禁用按钮并使用转换器更改背景。
我的视图模型中的代码
private async void componentesAsignar()
{
Bussy = true; //need for the converter, to set the background
MyActionStarted = true; //need to disabled the button
await Task.Delay(10000); //the code that takes many time
}
我的观点中的代码
<Button Content="MyAction" Height="23" Name="btnMyAction" Width="75"
Background="{Binding MyActionStarted, Converter={StaticResource actionInProgressToColorConverter}}">
我的转换器
object IValueConverter.Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if(((bool)value) == false)
{
return "#FFDDDDDD";
}
else
{
return "#FF589FF3";
}
}
非常感谢。
答案 0 :(得分:1)
我不使用转换器,而是使用DataTrigger:
<Button ...>
<Button.Style>
<Style TargetType="{x:Type Button}">
<Setter Property="Background" Value="#FFDDDDDD"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Bussy, Mode=OneWay}" Value="True">
<Setter Property="IsEnabled" Value="False"/>
<Setter Property="Background" Value="#FF589FF3"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>