大家好,很抱歉这么长的问题,但是......
我有一个像这样的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; }
}
}
当然我的窗口上有一个TextBlock,Text Property绑定到SimpleText。
当我注入C#实例时,Everyting工作。但我收到BindingError,在F#实例的情况下可以找到属性。为什么会这样呢?
答案 0 :(得分:3)
我对WPF绑定的工作原理不太了解,但有一点要记住,F#中的接口是显式实现的(这意味着实现方法实际上是非public),但默认情况下它们隐含在C#中。如果在C#中使用显式接口实现会发生什么?如果这确实是问题,那么最简单的解决方法就是在你的F#类型上创建一个公共属性,它复制了接口实现的行为。