Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在WPF中编写VTK应用程序,尝试遵循MVVM

在WPF中编写VTK应用程序,尝试遵循MVVM
EN

Stack Overflow用户
提问于 2014-06-22 21:23:12
回答 1查看 2.1K关注 0票数 2

因此,我对WPF和MVVM非常陌生,虽然我理解前提,但这些东西中的许多东西就像是试图为我读取象形文字。

基本上,我的情况是这样的:我使用的是Activiz,一个用于VTK的c#包装器,它是一个图像处理/可视化库。因此,在这个库中,有一个名为vtk:RenderWindowControl的WinForms控件,它是一个包含处理所有可视化功能的类的opengl控件。我认为只使用WinForms会更简单,但这对我来说并不是一个真正的选择。

因此,要在WPF应用程序中使用vtk:RenderWindowControl,我只需要将其放入WindowsFormsHost中,然后就可以在后面的代码中使用它,就像example code一样(如果这是.xaml.cs文件的正确术语)

这对于测试应用程序来说是很好的,但在实践中,如果可能的话,我想遵循MVVM。这就是我撞到墙的地方。如果"renderControl“位于View类中,我如何在ViewModel中引用和使用它?我认为绑定是这个问题的答案,但我只知道如何为简单的类型和命令做这件事。

遵循我在另一个线程中找到的想法,我设法设置了类似this answer的东西

我的代码是这样的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public partial class RenderPanel_View : UserControl
{
    public static readonly new DependencyProperty RWControlProperty =
        DependencyProperty.Register("RWControl", typeof(RenderWindowControl), typeof(RenderPanel_View), new PropertyMetadata(null));

    public RenderWindowControl RWControl
    {
        get { return (RenderWindowControl)GetValue(RWControlProperty); }
        set { SetValue(RWControlProperty, value); }
    }

    public RenderPanel_View()
    {
        // This is necessary to stop the rendercontrolwindow from trying to load in the 
        // designer, and crashing the Visual Studio. 
        if (System.ComponentModel.DesignerProperties.GetIsInDesignMode(this)) {
            this.Height = 300;
            this.Width = 300;
            return;
        }

        InitializeComponent();
        this.RWControl = new RenderWindowControl();
        this.RWControl.Dock = System.Windows.Forms.DockStyle.Fill;
        this.WFHost.Child = this.RWControl;
    }
}

我的.xaml看起来像这样

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<UserControl x:Class="vtkMVVMTest.RenderPanel.RenderPanel_View"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:vtk="clr-namespace:Kitware.VTK;assembly=Kitware.VTK"
         xmlns:rp="clr-namespace:vtkMVVMTest.RenderPanel"
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300"
         RWControl="{Binding VMControlProperty}">
    <Grid>
        <WindowsFormsHost x:Name ="WFHost"/>
    </Grid>
</UserControl>

所以有两件事。其一,xaml头的最后一行是错误的,“成员'RWControl‘无法识别或访问”。我真的不明白为什么。其次,我猜是等式中ViewModel的一半,VMControlProperty应该如何定义?

至少我是在正确的轨道上,还是这条路走错了?

EN

回答 1

Stack Overflow用户

发布于 2014-06-22 21:33:00

一些控件不是MVVM友好的,你必须让ViewModel意识到视图界面,并允许直接与之交互。不要向ViewModel开放整个控件,这将破坏编写测试的能力,将接口放在顶部,例如IRenderPanelView,并在接口中只打开您需要从ViewModel访问的功能。然后,您可以在视图中创建此类型的DP属性,在构造函数中设置它,并将其绑定到xaml中的ViewModel.View属性。

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

https://stackoverflow.com/questions/24355868

复制
相关文章
Linux下双网卡均为DHCP模式如何查看网关IP信息
1、LinuxServer服务器双网卡均是DHCP模式获取的IP地址 ifconfig命令查看可以看到
yuanfan2012
2019/06/02
13.8K0
HCIE|HCIA 那些年你不知道如何连接配置网络设备
现网中网络设备首次配置及日常配置,通常分为Console线缆连接配置、Web控制台配置、Telnet或SSH配置,而今天给大家主要介绍的是Console线缆配置,很多小伙伴都会说学了这么久,连基础连接都不会连接。哈哈,那咱们就开始吧。
Ponnie
2021/02/24
3940
Linux系统下命令行连接蓝牙设备
此时,在桌面的设置界面“我的设备”中可以看到蓝牙中键盘为已配对状态,但此时可能依然无法成功连接。
用户1685462
2021/07/27
6.3K0
解除飞young宽带设备数量的限制
首先感谢cj大佬 的开源,吃水不忘挖井人 很多学校都有校园网需要拿账号去登陆或者限制流量或者限制时间才能畅游internet这就很烦,俗话说上有政策下有对策,大家也想了很多的办法来解决这些限制。诸如:绕端口,扫账号,克隆mac利用路由器固件等等! 今天我就要给大家介绍一个针对破解飞young设备限制方法极其简单,这样一个宿舍都可以用了。可以平摊网费剩下一笔巨款。废话不多说我们进入正题。
用户7146828
2021/08/09
6K0
网关卸载模式
将共享或专用服务功能卸载到网关代理。 此模式可以通过将共享服务功能(如 SSL 证书的使用)从应用程序的其他部分移动到网关,简化应用程序开发。
只喝牛奶的杀手
2019/08/26
1.2K0
网关卸载模式
用 subsetting 限制连接池中的连接数量
内网使用服务发现后,服务与其它服务的实例之间使用一条 TCP 长连接进行通信。这种情况下常见的做法是按照 registry 下发的 host:port 列表来直接建连。
梦醒人间
2020/12/02
1.9K0
用 subsetting 限制连接池中的连接数量
智能灯杆网关设备
计讯物联智能灯杆网关设备工业级处理器更稳定,支持全网通5G、4G网络,提供无线长距离大数据传输、协议转换、边缘计算等功能,可承载大量传感器、仪器仪表、摄像头、音视频外放设备,以Linux嵌入式实时操作系统为软件支撑平台,完成智能灯杆的远程灯控、气象监测、安防监测、信息发布、内涝监测、一键报警、充电桩等一体化管控。
星辰大海大星
2021/08/06
8590
智能灯杆网关设备
设备物联网网关
设备物联网网关:物联网网关硬件包括处理器/微控制器、物联网传感器、保护电路、连接模块(如ZigBee、蓝牙、WiFi等)。
用户6789871
2019/12/06
2.4K0
智能硬件EasyNVR视频边缘计算网关如何更改设备的DNS?
EasyNVR既有软件平台版,又有硬件设备版。硬件版本体积小,方便部署,配置完成后即可直接放置于现场,使用时通网通电即可,在很多项目中,用户都会选择部署一套EasyNVR视频边缘计算网关来满足需求。我们在此前的文章中也介绍过不少关于EasyNVR硬件的相关技术配置与操作教程,大家可以在博客中自行搜索进行了解。
EasyNVR
2022/05/11
1.4K0
智能硬件EasyNVR视频边缘计算网关如何更改设备的DNS?
网关路由模式
使用单个终结点将请求路由到多个服务。 如果希望在单个终结点上公开多个服务,并根据请求路由到适当的服务,则此模式非常有用。
只喝牛奶的杀手
2019/09/02
7110
网关路由模式
你真的知道如何连接mysql么
可以在my.cnf配置文件的[client]标签下增加用户信息处理。但是,该方式默认使用的/etc/my.cnf配置文件下的信息,因此需要调整该目录下的对应标签下的信息
俊才
2019/09/12
1.2K0
你真的知道如何连接mysql么
网关聚合模式
使用网关可将多个单独请求聚合成一个请求。 当客户端必须向不同的后端系统发出多个调用来执行某项操作时,此模式非常有用。
只喝牛奶的杀手
2019/08/26
1.3K0
网关聚合模式
视频上云网关平台EasyNTS组网硬件设备连接断线无法重连,该如何解决?
当网络环境复杂需要进行互联网直播时,首先需要解决网络问题。此时TSINGSEE青犀视频会推荐大家使用EasyNTS进行网络穿透来实现视频监控组网。最近TSINGSEE青犀视频的研发人员在官网测试EasyNTS,发现EasyNTS服务端显示设备上线后,过一段时间就会显示离线,再之后就重连不上了,只能重新启动设备进行重连。
EasyNVR
2020/08/25
7490
视频上云网关平台EasyNTS组网硬件设备连接断线无法重连,该如何解决?
iOS如何判断设备处于静音模式
-(BOOL)silenced { #if TARGET_IPHONE_SIMULATOR // return NO in simulator. Code causes crashes for some reason. return NO; #endif CFStringRef state; UInt32 propertySize = sizeof(CFStringRef); AudioSessionInitialize(NULL, NULL, NULL, NULL); Aud
好派笔记
2021/10/29
1.6K0
EasyCVR智能边缘网关设备提示报错该如何解决?
EasyCVR视频融合平台部署轻快、功能灵活,在视频能力上,可提供视频直播、录像、回放、检索、云存储、级联、告警等功能。平台可支持多协议、多类型设备接入,包括国标GB28181、RTMP、RTSP、海康SDK、大华SDK、海康Ehome等,同时也提供API接口供用户二次开发、集成与调用。
TSINGSEE青犀视频
2022/10/09
3480
网关设备和通信协议
路由表过大会导致网络效率降低,所以需要协议内部实现AS自治域划分。最终相同AS内部使用IGP协议,AS外部使用EGP协议。
sofu456
2019/07/09
1K0
网关设备和通信协议
api网关怎么转发http请求 api网关模式的优点
api网关担任着一个通信互通的桥梁,因此api网关一定要可以承担不同线路的通信需求。进程间的通讯有同步和非同步两种模式,这就要求api网关,针对每一种通讯模式都有处理方法。是因为微服务应用都是一种分布式的服务架构,此他们之间必须使用进程通讯机制。api网关怎么转发http请求?
用户8715145
2021/12/21
2.4K0
物联网关如何集中管控连锁门店内设备
随着物联网和信息化的发展,融合了物联网技术的数字化、无人化的新零售门店陆续出现在各个城市。这类新型连锁店铺提供包括无人售货、多样化快捷支付、智能补货上货等多种智慧化服务,不仅能够提高消费者购物体验,还促进门店销售,降低成本。
智慧物联小马
2022/08/19
4380
物联网关如何集中管控连锁门店内设备
如何使用 PHP 扩展 Memcached 的长连接模式
我们知道 Memcache 有个 pconnect() 方法可以实现长连接,其实 Memcached 也可以实现持久化连接。
Denis
2023/04/15
6510
知乎千万级高性能长连接网关是如何搭建的
实时的响应总是让人兴奋的,就如你在微信里看到对方正在输入,如你在王者峡谷里一呼百应,如你们在直播弹幕里不约而同的 666,它们的背后都离不开长连接技术的加持。
Bug开发工程师
2019/06/11
1.4K0
知乎千万级高性能长连接网关是如何搭建的

相似问题

如何在Typoscript中定义对象变量(如javascript)

10

Javascript:解析数组,如搜索查询字符串

33

Javascript对象,如函数

10

如何在JavaScript中查询对象?

54

使用Javascript发送查询字符串

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文