通过 F# 绑定到视图模型的接口实现期间出现错误

本文关键字:实现 错误 接口 绑定 视图 模型 通过 | 更新日期: 2023-09-27 18:33:00

大家好,很抱歉这么长的问题,但是...

我有一个像这样的 C# 接口:

public interface ISimpleViewModel
{
    string SimpleText { get; }
}

然后我有一个从它继承的 F# 类型:

type SimpleViewModel() = 
    interface ISimpleViewModel with
        member this.SimpleText
            with get() = "Hello again!"

我还有一个 C# 继承者:

public class SimpleCSViewModel : ISimpleViewModel
{
    public string SimpleText
    {
        get { return "Just testing"; }
    }
}

最终,我有一个超级简单的WPF应用程序,MainWindow ctor以这种方式注入了ISimpleViewModel实例:

public partial class MainWindow : Window
{
    public MainWindow(ISimpleViewModel viewModel)
    {
        ViewModel = viewModel;
        InitializeComponent();
    }
    public ISimpleViewModel ViewModel
    {
        get { return DataContext as ISimpleViewModel; }
        set { DataContext = value; }
    }
}

当然,我的窗口上有一个文本块,文本属性绑定到简单文本。

在我注入 C# 实例时,一切都有效。但是我收到绑定错误,在 F# 实例的情况下可以找到属性。为什么会这样?

通过 F# 绑定到视图模型的接口实现期间出现错误

我对 WPF 绑定的工作原理了解不够,但要记住的一件事是 F# 中的接口是显式实现的(这意味着实现方法实际上是非公共的),但默认情况下它们是隐式的 C# 中。 如果改用 C# 中的显式接口实现,会发生什么情况? 如果这确实是问题所在,那么最简单的解决方法就是在 F# 类型上创建一个公共属性,该属性复制接口实现的行为。