我正在使用Callburn.Micro for MVVM用C#WPF做一个简单的应用程序

我想执行ItemsControl项的函数,但在单击Rectangle项时出现下一个异常

System.Exception:"未找到方法ChangeColor的目标."

以下是XAML代码

<ItemsControl ItemsSource="{Binding Lines}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Canvas Background="LightYellow" Margin="10 0" Width="{Binding CanvasWidth}" Height="{Binding CanvasHeight}" Focusable="True"/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemContainerStyle>
        <Style TargetType="ContentPresenter">
            <Setter Property="Canvas.Left" Value="{Binding X}"/>
            <Setter Property="Canvas.Top" Value="{Binding Y}"/>
        </Style>
    </ItemsControl.ItemContainerStyle>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Rectangle Width="{Binding Width}"
                       Height="{Binding Height}"
                       Stroke="Black" StrokeThickness="1"
                       Fill="Black"
                       cal:Message.Attach="[Event MouseDown] = [Action ChangeColor()]"
            />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

ItemsSource是一个ObservableCollection,它包含我创建的一个对象,该对象只有几个变量,如Rectangle元素中的界限和ChangeColor函数

我认为这与当前上下文有关,但我不明白为什么,当绑定变量WidthHeight工作得很好时,尽管它们与ChangeColor函数在同一个对象中

推荐答案

我看到的唯一一件事就是对你的方法的错误定义.

我已经测试过了,没有问题,这是我测试过的代码:在MainViewModel.cs

using Caliburn.Micro;
using System.Collections.Generic;
using System.Windows.Media;
using System.Windows.Shapes;

namespace UserControlSample.ViewModels
{
    public class MainViewModel : Screen
    {
        public BindableCollection<Lines> Lines { get; set; }
        private int canvasWidth;
        public int CanvasWidth
        {
            get { return canvasWidth; }
            set
            {
                canvasWidth = value;
                NotifyOfPropertyChange(() => CanvasWidth);
            }
        }
        private int canvasHeight;
        public int CanvasHeight
        {
            get { return canvasHeight; }
            set
            {
                canvasHeight = value;
                NotifyOfPropertyChange(() => CanvasHeight);
            }
        }

        public MainViewModel()
        {
            var a = new List<Lines>()
            {
                new Lines {X = 20, Y = 20, Width = 400, Height = 50}
            };
            canvasWidth = 500;
            canvasHeight = 300;
            Lines = new BindableCollection<Lines>(a);
            FileNames = new BindableCollection<string>() { "Test1", "test2" };
        }

        public void ChangeColor(Rectangle sender)
        {
            SolidColorBrush color = new SolidColorBrush(Colors.AliceBlue);
            sender.Fill = color;
        }
    }
}

XAML中定义的方法:

cal:Message.Attach="[Event MouseDown] = [Action ChangeColor($source)]"

和班级界线:

namespace UserControlSample.ViewModels
{
    public class Lines
    {
        public int X { get; set; }
        public int Y { get; set; }
        public int Width { get; set; }
        public int Height { get; set; }
    }
}

Csharp相关问答推荐

如何定义所有项目的解决方案版本?

如何使用PDFSharp将文本添加到现有PDF

当MD5被废弃时,如何在Blazor WASM中使用它?

Serilog SQL服务器接收器使用UTC作为时间戳

有没有办法把+02:00转换成TimeSpan?""

程序集.加载从exe的异常

在. net毛伊岛窗口的深度链接已经创建""

在C#WinUI中,一个关于System的崩溃."由于未知原因导致执行不例外"

如何将Kafka消息时间戳转换为C#中的日期和时间格式?

有没有办法使.NET 6应用程序在特定的.NET 6运行时版本上运行

如何在C#中使用Postman中的本地IP向本地主机上运行的本地API发出请求

C#中Java算法的类似功能

正确处理嵌套的本机集合

Linux Docker上的.NET6在某个时间抛出后,在加密操作期间发生System.Security.Cryptography.CryptographicException:错误

GODOT 4向C#中的字符串参数发送信号以等待

升级后发出SWITCH语句

在PostgreSQL上使用ExecuteSqlRawAsync的C#11原始字符串文字有区分大小写的问题

Blazor Server.NET 8中的Blazore.FluentValidation问题

单元测试类型为HttpClient with Microsoft.Extensions.Http.Resilience

缩写的MonthNames有问题