C#:如何更改MVVM中的按钮图标?

时间:2017-08-08 01:36:46

标签: c# wpf button mvvm

我尝试将Button图标更改为Click_Event,所以目前我有这样的xaml:

<Button Content="{materialDesign:PackIcon LanDisconnect}" Command="{Binding Connect}" />

在ViewModel中:

public ICommand Connect
{
    get
    {
        _Connect = new RelayCommand(
            param => ConnectChip());
        return _Connect;
    }
}

如何在命令{MaterialDesign:PackIcon LanConnect}中将按钮图标更改为Connect?谢谢!

2 个答案:

答案 0 :(得分:2)

您可以将Content的{​​{1}}属性绑定到您在Button方法中设置为新值的PackIcon属性。

<强> XAML:

ConnectChip()

查看型号:

<Button Content="{Binding Icon}" Command="{Binding Connect}" />

答案 1 :(得分:1)

虽然一些评论提出了稍微更高级的解决方案(例如使用DataTriggers)。我建议(至少从一开始)你只需要为按钮内容添加一个绑定。然后,您可以向视图模型添加属性,并通过命令更新它。

在您的情况下,您使用的是Material Design内容。

因此,在您的视图模型中,您需要包含一个图标属性:

using MaterialDesignThemes.Wpf;

public PackIconKind IconKind
{
    get { return _IconKind; }
    set { SetField(ref _IconKind, value); }
}
private PackIconKind _IconKind = PackIconKind.LanDisconnect;

See this reference for the SetField method

然后将按钮XAML更改为:

<Button Command="{Binding MyCommand}" Width="100" Height="32">
    <materialDesign:PackIcon Kind="{Binding IconKind}" />
</Button>

这会在按钮中设置图标的绑定。现在,视图模型可以随时更改此Kind。我更喜欢在构造函数中设置命令。我首先有一个命令属性如下:

public ICommand MyCommand { get; }

并在构造函数中:

MyCommand = new RelayCommand(UpdateIcon);

然后将UpdateIcon方法添加到视图模型中。然后可以从其他地方调用此方法(而不仅仅是按钮命令)。

protected void UpdateIcon()
{
    IconKind = MaterialDesignThemes.Wpf.PackIconKind.LanConnect;
}