通过F#绑定到viewmodel接口实现期间的BindingError

时间:2012-05-02 15:14:46

标签: c# wpf mvvm f#

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

我有一个像这样的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#实例的情况下可以找到属性。为什么会这样呢?

1 个答案:

答案 0 :(得分:3)

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