c# - 我们可以通过 MVVM 中的 ICommand 获取按钮单击时的按钮属性(如按钮文本、按钮隐藏状态等)吗

标签 c# wpf mvvm

我正在使用 ICommand(MVVM) 进行按钮单击事件,但我在这里有一点疑问。

当我将 ICommand 用于按钮单击事件时,我们可以像在按钮单击事件中那样从后面的代码中访问按钮的属性吗?

在后面的代码中,很容易通过 sender 对象我们可以得到如下所示的属性,

private void BtnClicked(object sender, RoutedEventArgs e)
    {
        var button = sender as Button;
        var datacontext = button.DataContext;
    }

同样,我们可以在 ICommand 中执行此操作吗?

提前致谢

最佳答案

以下是如何使用 MultiBinding 的示例实现和 IMultiValueConverter :

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Data;

namespace SO_app.Converters
{
    class MultiValueConverter : IMultiValueConverter
    {
        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            foreach (var item in values)
            {
                //process the properties passed in
            }
            return new object();
        }

        public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}  

然后在您的 xaml 中:
<Window x:Class="SO_app.TestWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:SO_app"
    xmlns:converter="clr-namespace:SO_app.Converters"
    mc:Ignorable="d"
    xmlns:vm="clr-namespace:VM;assembly=VM"
    Title="TestWindow" Height="300" Width="300">
<Window.DataContext>
    <vm:MainViewModel/>
</Window.DataContext>
<Window.Resources>
    <converter:MultiValueConverter x:Key="mvc"/>
</Window.Resources>
<Grid>
    <Button Command="{Binding SomeCommand}" Content="Some value here">
        <Button.CommandParameter>
            <MultiBinding Converter="{StaticResource mvc}">
                <Binding Path="Visibility" RelativeSource="{RelativeSource Self}"/>
                <Binding Path="Content" RelativeSource="{RelativeSource Self}"/>
            </MultiBinding>
        </Button.CommandParameter>
    </Button>
</Grid>

以下是您将在 VS 中看到的内容:
MultiValueConverter in debug

关于c# - 我们可以通过 MVVM 中的 ICommand 获取按钮单击时的按钮属性(如按钮文本、按钮隐藏状态等)吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44691863/

相关文章:

c# - 为什么 EF 无法按另一个集合的顺序对项目进行排序以及如何解决?

c# - 仅在选择选项卡时运行查询 WPF MVVM

c# - 使用 iText 7 for .NET 时如何定义 Colspan 和 Rowspan

c# - 触发属性更改后的wpf按钮命令绑定(bind)

c# - 如何在C#中处理大量变量

c# - 避免集合已修改错误

c# - 在 C'# 中以编程方式获取所有 TFS 分支

c# - Caliburn.micro 将参数从一个屏幕传递到另一个屏幕

c# - Generic.xaml - 引用样式

c# - 在 WPF 中解析本地 XML 文档(调试工作,发布后失败)