Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 绑定到viewmodel';s接口的F实现#_C#_Wpf_Mvvm_F# - Fatal编程技术网

C# 绑定到viewmodel';s接口的F实现#

C# 绑定到viewmodel';s接口的F实现#,c#,wpf,mvvm,f#,C#,Wpf,Mvvm,F#,大家好,很抱歉问了这么长的问题,但是 我有这样一个C#接口: 公共界面是SimpleViewModel { 字符串SimpleText{get;} } 然后我从中继承了一个F#类型: 键入SimpleViewModel()= 接口ISimpleViewModel与 成员:this.SimpleText 使用get()=“你好!” 我还有一个继承人: 公共类SimpleCSViewModel:ISimpleViewModel { 公共字符串SimpleText { 获取{return“Just

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

我有这样一个C#接口:

公共界面是SimpleViewModel
{
字符串SimpleText{get;}
}
然后我从中继承了一个F#类型:

键入SimpleViewModel()=
接口ISimpleViewModel与
成员:this.SimpleText
使用get()=“你好!”
我还有一个继承人:

公共类SimpleCSViewModel:ISimpleViewModel
{
公共字符串SimpleText
{
获取{return“Just testing”;}
}
}
最终我有了一个超级简单的WPF应用程序,MainWindow ctor通过以下方式注入ISimpleViewModel实例:

公共部分类主窗口:窗口
{
公共主窗口(ISimpleViewModel viewModel)
{
ViewModel=ViewModel;
初始化组件();
}
公共ISimpleViewModel视图模型
{
获取{返回DataContext作为ISimpleViewModel;}
设置{DataContext=value;}
}
}
当然,我的窗口上有一个TextBlock,它的Text属性绑定到SimpleText


当我注入C#instance时,每种方法都能起作用。但我收到BindingError消息,在F#实例的情况下可以找到该属性。为什么会这样?

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

对于我的情况,如果我将注入ViewModels.SimpleViewModel(其中ViewModels是F#中的模块名),并在MainWindow部分类中使用它,那么效果很好。另外,您使用SameName创建公共属性的解决方案也具有相同的行为:)所以谢谢:)