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