大家好,很抱歉问了这么长的问题,但是...
我有一个像这样的 C# 接口(interface):
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"; }
}
}
最终我有一个 super 简单的 WPF 应用程序,其中 MainWindow ctor 以这种方式注入(inject) ISimpleViewModel 实例:
public partial class MainWindow : Window
{
public MainWindow(ISimpleViewModel viewModel)
{
ViewModel = viewModel;
InitializeComponent();
}
public ISimpleViewModel ViewModel
{
get { return DataContext as ISimpleViewModel; }
set { DataContext = value; }
}
}
当然,我的窗口上有一个 TextBlock,它的 Text 属性绑定(bind)到 SimpleText。
当我注入(inject) C# 实例时,一切正常。但是我收到 BindingError,在 F# 实例的情况下可以找到该属性。为什么会这样?
最佳答案
我不太了解 WPF 绑定(bind)的工作原理,但要记住的一件事是 F# 中的接口(interface)是显式实现的(这意味着实现方法实际上是非public),但默认情况下它们在 C# 中是隐式的。如果改为在 C# 中使用显式接口(interface)实现,会发生什么情况?如果这确实是问题所在,那么最简单的解决方法就是在 F# 类型上创建一个公共(public)属性,该属性复制接口(interface)实现的行为。
关于c# - 通过 F# 绑定(bind)到 View 模型的接口(interface)实现期间出现 BindingError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10416606/