我正在尝试用WPF构建一个SharpGL应用程序,但是集成视图模型有困难。
我将DataContext of a OpenGLControl绑定到ViewModel中的OpenGLControl属性,并为视图模型中的绘图函数创建事件,但它们从未被调用。
OpenGLControl只是显示为一个黑色屏幕。当我只是在xaml.cs文件后面的代码中实现绘图函数时,它可以工作,但我真的想使用viewModel。
<Window.DataContext>
<local:ViewModel />
</Window.DataContext>..。
<StackPanel Orientation="Horizontal">
<GroupBox Width="80" Header="Controls">
<StackPanel>
<TextBox Text="{Binding TranslationX}" />
<TextBox Text="{Binding TranslationY}" />
<TextBox Text="{Binding TranslationZ}" />
</StackPanel>
</GroupBox>
<sharpGL:OpenGLControl x:Name="GLControl" DataContext="{Binding OpenGLControl}" MinWidth="350"/>
</StackPanel>ViewModel代码:
private OpenGLControl openGLControl = new OpenGLControl();
public OpenGLControl OpenGLControl
{
get
{
return openGLControl;
}
set
{
openGLControl = value;
NotifyPropertyChanged(); //Custom implementation of
//INotifyPropertyChanged
}
}
public ViewModel()
{
OpenGLControl.OpenGLDraw += drawEvent;
}
private void drawEvent(object sender, OpenGLEventArgs args)
{
draw(args.OpenGL); // draws a number of vertices, works when used in
// code behind
}发布于 2018-03-25 20:56:37
WPF中的DataContext控制绑定将绑定到的确切属性。通过设置类似于DataContext的<sharpGL:OpenGLControl DataContext="{Binding OpenGLControl}" />所做的工作本质上是这样的:当搜索绑定所需的属性时,在OpenGLControl ViewModel中进行搜索。
这不起作用,因为您正在创建两个OpenGLControl,一个是通过<sharpGL:OpenGLControl/>在XAML中创建的,另一个是在您的ViewModel中创建的。接下来,为ViewModel设置事件(不可见),并指示在XAML中创建的OpenGLControl应该搜索任何绑定所需的数据,以查看ViewModel中的OpenGLControl。
因为OpenGLControl是一个控件,所以您可能不应该把它看作是ViewModel的一个很好的坦率。相反,尝试在窗口中创建一个均衡器,并通过调用委托将所有从窗口绘制的事件回调转发到您的ViewModel。
https://stackoverflow.com/questions/49477223
复制相似问题