winform中加入wpf控件并绑定数据源实现跨线程自动更新

jayhust jayhust     2022-08-03     346

关键词:

 

1. WINFORM中添加两个ElementHost,一个放WPF的Button,一个放WPF的TextBox。其中TextBox与数据源绑定,实现跨线程也可以自动更新,而不会出现WINFORM的TextBox控件与数据源绑定后,存在子线程中更新数据源报错(跨线程更新控件)的情况。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;

using System.Windows; // 自行添加支持WPF控件
using System.Windows.Data; // 自行添加支持WPF控件
using System.Windows.Controls; // 自行添加支持WPF控件

using System.Windows.Forms;
using System.IO.Ports;
using System.Net;
using System.Net.Sockets;
using System.Threading;

namespace UI
{
    public partial class MainForm : Form
    {

        public class DataSource : INotifyPropertyChanged
        {
            private int _index;

            public int Index
            {
                get { return _index; }
                set
                {
                    _index = value;
                    if (PropertyChanged != null)
                    {
                        this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Index"));
                    }
                }
            }
            public event PropertyChangedEventHandler PropertyChanged;
        }

        System.Windows.Data.Binding _bind;
        Thread _thread;
        DataSource _dataSource;
        bool _run;

        public MainForm()
        {
            InitializeComponent();

            // Create a WPF Button
            System.Windows.Controls.Button btn = new System.Windows.Controls.Button();
            btn.Content = "Button in WPF"; // 修改内容属性
            System.Windows.Media.FontFamily font = new System.Windows.Media.FontFamily("Ariel"); // 修改字体属性
            btn.FontFamily = font;
            btn.Click += new System.Windows.RoutedEventHandler(btn_Click); // 增加事件响应
            // Add it to ElementHost
            elementHost1.Child = btn;

            // Create a WPF TextBox
            System.Windows.Controls.TextBox txtBox = new System.Windows.Controls.TextBox();
            txtBox.Text = "TextBox in WPF"; // 修改内容属性
            txtBox.FontFamily = font;
            _dataSource = new DataSource();
            // System.Windows.Data.Binding方式
            _bind = new System.Windows.Data.Binding();
            _bind.Source = _dataSource;
            _bind.Path = new PropertyPath("Index");
            _bind.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
            txtBox.SetBinding(System.Windows.Controls.TextBox.TextProperty, _bind); // 增加数据源绑定
            // Add it to ElementHost
            elementHost2.Child = txtBox;
            
            // 子线程运行
            _run = true;
            _thread = new Thread(Test);
            _thread.Start();
        }

        void Test()
        {
            while (_run)
            {
                _dataSource.Index++;
                Thread.Sleep(100);
            }
        }

        private void btn_Click(object sender, EventArgs e)
        {
            System.Windows.Forms.MessageBox.Show("WPF button clicked!");
        }
        
        private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            _run = false;
            if (_thread != null)
            {
                _thread.Join();
                _thread = null;
            }
        }
    }
}

 

wpf怎么在遮罩层中加入控件

参考技术A我不是很确定你的意思。不过遮罩层也就是设置下透明度的一个容器而已。如果你这个遮罩层不是用单纯的rectangle去做,而是用grid或者border去做,里面就可以任意放控件了。 查看详情

wpf和winform的区别

参考技术A  wpf和winform的区别是:  1、WPF和WinForms是两种完全不一样的UI技术,WPF也并不能完全取代WinForms。  2、inform的控件更多,但是wpf的界面可以更炫酷,更重要的是wpf对于屏幕的自适应比winform优秀得多。  3、winfor... 查看详情

wpf入门教程系列十五——wpf中的数据绑定

...用户界面,同时WPF提供了数据绑定功能。WPF的数据绑定跟Winform与ASP.NET中的数据绑定功能类似,但也有所不同,在WPF中以通过后台代码绑定、前台XAML中进行绑定,或者两者组合的方式进行数据绑定。您可以绑定控件、公共属性、... 查看详情

c#winform类似于如下图显示用啥控件绑定并实现分页

DataGridView控件是表格,而你发的是web的模版List.所以在Winform中可使用DataRepeater.可以在模版中创建你想要的布局.直接绑定应该做不了.需要手动添加.更多内容请看msdn的例程:http://msdn.microsoft.com/zh-cn/subscriptions/downloads/cc488278.aspx关于... 查看详情

wpf显示视频,image控件闪屏,使用winform控件实现

使用C#调用mingw的动态库实现视频识别软件,程序通过C++调用opencv打开视频,将图像的原始数据以rgb24的方式传递给C#端,C#通过构造图像对象给控件赋值的方式显示图片。一开始使用wpf的控件image:1while(true)2{3S_IMGsimg=Mingw.display();/... 查看详情

WinForm 数据绑定控件结果返回类名不是实际数据

】WinForm数据绑定控件结果返回类名不是实际数据【英文标题】:WinFormDataboundControlResultsReturnClassNameNotActualData【发布时间】:2020-08-1009:29:28【问题描述】:我很难找到解决问题的方法。我搜索了互联网,多次重建了我的课程,并... 查看详情

winform开发中如何将数据库字段绑定到combobox控件

...多问题,希望通过博客把一些印象深刻的问题记录下来。Winform开发中如何将数据库字段绑定到ComboBox控件1.问题引入在开发中用到了ComboBox控件,也就是实现下拉选择功能的控件。但是选项的数据并不是固定的,而是要根据数据... 查看详情

binding:数据绑定

...节主要讲使用Binding进行数据绑定。Binding的作用    在WinForm中,我们要想对控件赋值,需要在后台代码中拿到控件对象进行操作,这种赋值形式,从根本上是无法实现界面与逻辑分离的。在WPF中,微软引入了... 查看详情

将 WPF 控件与 WinForms 一起使用

】将WPF控件与WinForms一起使用【英文标题】:UsingaWPFControlwithWinForms【发布时间】:2021-05-2818:48:39【问题描述】:我有一个自定义的WPF按钮控件,我想将此控件与WinForm应用程序一起使用。我知道如何使用ElementHost将WPF用户控件与Win... 查看详情

强制验证 WPF 中的绑定控件

】强制验证WPF中的绑定控件【英文标题】:ForcevalidationonboundcontrolsinWPF【发布时间】:2010-10-0318:17:25【问题描述】:我有一个WPF对话框,上面有几个文本框。文本框绑定到我的业务对象并附加了WPF验证规则。问题是用户可以完美... 查看详情

winform控件combobox数据绑定

ComboBox下拉菜单控件,在数据库内的ComboBox应用的表进行修改时,如果是用的普通方法,显示数据一个方法,添加数据一个方法这样会导致程序后期维护难度增加,在这里使用数据绑定来让ComboBox数据实现根据数据库对应表数据显示,降低... 查看详情

datagrid数据源绑定winform和wpf的区别

SqlDataAdaptersda=newSqlDataAdapter();sda.SelectCommand=cmd;DataSetds=newDataSet();sda.Fill(ds);DataGrid1.ItemsSource=ds.Tables[0]; (这是winform中的写法)------------------------------------------------ 查看详情

wpf动态列(datagridtemplatecolumn)绑定数据(自定义控件)

原文:WPF动态列(DataGridTemplateColumn)绑定数据(自定义控件)  因为项目需要要实现这个~ 怎么实现画红框内容部分田字格和上面Textbox属于一个自定义控件 大致功能是获得一个字符串和一组颜色值最后田字格会显... 查看详情

WPF MVVM - 如何绑定自定义控件->ToggleButton.IsChecked 到 View->TextBox.Text

...ext【发布时间】:2014-12-1021:37:17【问题描述】:我正在从WinForms转移到WPF并尝试为触摸屏应用程序实现MVV 查看详情

wpf随笔之控件根据设定的显示行数列数填充控件并自适应窗体大小(多绑定mvvm方式实现)(代码片段)

...图,如见最下面)需求:根据设置的行数列数,控制展示控件个数,并且填充的控件们大小刚刚好自适应填充满固定的区域,并且调整窗体大小的时候控件动态自适应窗体大小,即自适应大小并不显示滚动条(比如,设置了1行1... 查看详情

wpf的特点和优点哪些?

...定”功能,使得MVVM得以实现,成为“属性驱动”,而非WinForm的“事件驱动”;属性的更改可以自动获得,甚至动过转换器触发各种展示/行为的变更;3.绚丽的展示效果,WPF(WindowsPresentationFundation)顾名思义其强大的图形化API为... 查看详情

Winforms 中的数据绑定

】Winforms中的数据绑定【英文标题】:DatabindinginWinforms【发布时间】:2011-12-0114:32:06【问题描述】:我在VS2010中有一个数据输入WinformsApp。连同连接到SQLCompact数据库的实体数据模型(.edmx)。在这个数据库中,我有一个要插入的表Tic... 查看详情

winform绑定listview控件

...taSet的方法,返回你要绑定的那张表的数据,把DataSet作为数据源给listView,绑定就好啦 查看详情