【问题标题】:SharpGL + WPF: Draw are events never calledSharpGL + WPF:绘制是从未调用过的事件
【发布时间】:2018-03-25 14:58:52
【问题描述】:

我正在尝试使用 WPF 构建一个 SharpGL 应用程序,但在集成视图模型时遇到了问题。

我将 OpenGLControl 的 DataContext 绑定到 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
    }

【问题讨论】:

    标签: c# wpf sharpgl


    【解决方案1】:

    WPF 中的DataContext 控制绑定将绑定到的确切属性的方式和对象。通过设置像&lt;sharpGL:OpenGLControl DataContext="{Binding OpenGLControl}" /&gt; 这样的DataContext 所做的基本上是这样的:在搜索绑定所需的属性 时,在OpenGLControl ViewModel 中搜索。

    这不起作用,因为您正在创建两个 OpenGLControl,一个是通过 &lt;sharpGL:OpenGLControl/&gt; 在 XAML 中创建的,另一个是在您的 ViewModel 内创建的。接下来,您为 ViewModel(不可见)设置事件并指示在 XAML 中创建的 OpenGLControl 它应该搜索任何 Binding 所需的数据以查看 ViewModel 中的 OpenGLControl。

    由于 OpenGLControl 是一个控件,您可能不应该认为它是 ViewModel 的一个很好的候选者。而是尝试在窗口中创建一个事件处理程序,并将所有绘制事件回调从窗口转发到您的 ViewModel,例如调用代理。

    【讨论】:

      猜你喜欢
      • 2022-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多