首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SharpGL + WPF:绘制是从未调用的事件

SharpGL + WPF:绘制是从未调用的事件
EN

Stack Overflow用户
提问于 2018-03-25 14:58:52
回答 1查看 445关注 0票数 0

我正在尝试用WPF构建一个SharpGL应用程序,但是集成视图模型有困难。

我将DataContext of a OpenGLControl绑定到ViewModel中的OpenGLControl属性,并为视图模型中的绘图函数创建事件,但它们从未被调用。

OpenGLControl只是显示为一个黑色屏幕。当我只是在xaml.cs文件后面的代码中实现绘图函数时,它可以工作,但我真的想使用viewModel。

代码语言:javascript
复制
<Window.DataContext>
    <local:ViewModel />
</Window.DataContext>

..。

代码语言:javascript
复制
<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代码:

代码语言:javascript
复制
    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
    }
EN

回答 1

Stack Overflow用户

发布于 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。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49477223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档