Wpf嵌入Echart控件,在MVVM模式下使用


客戶端上嵌入網頁是常有的事,本文主要介紹Wpf嵌入Echart,並且封裝成控件,可以用MVVM方式調用。(有位仁兄講的好,控件內部怎么寫都可以,但是用起來要方便)

老規矩,先上源碼地址:https://gitee.com/akwkevin/aistudio.-wpf.-echarts

再來幾張效果圖:

  

 

 

暫時只做了這四種類型,下面為以線條圖為例簡單介紹一下。

html網頁代碼如下,script里的函數是能被客戶端直接調用的,其中jsSetSize是在客戶端放大縮小的時候同步改變Echart的大小。

<!DOCTYPE html>

<html lang="zh-cn" xmlns="http://www.w3.org/1999/xhtml">
<!-- saved from url=(0013)about:internet -->
<head>
    <meta charset="utf-8" http-equiv="X-UA-Compatible" content="IE=5,6,7,8,9,10,11, chrome=1" />
    <title>ECharts</title>
    <style>
        #main {
            width: 97%;
            height: 97%;
            position: absolute;
        }
    </style>
</head>

<body>
    <div id="main" />
    <script src="echarts.js"></script>
    <script>
        myChart = echarts.init(document.getElementById('main'));
        option = {
            xAxis: {
                type: 'category',
                data: []
            },
            yAxis: {
                type: 'value'
            },
            series: [{
                data: [],
                type: 'line',
                smooth: true
            }, {
                data: [],
                type: 'line',
                smooth: true
            }, {
                data: [],
                type: 'line',
                smooth: true
            }, {
                data: [],
                type: 'line',
                smooth: true
            }, {
                data: [],
                type: 'line',
                smooth: true
            }, {
                data: [],
                type: 'line',
                smooth: true
            }, {
                data: [],
                type: 'line',
                smooth: true
            }, {
                data: [],
                type: 'line',
                smooth: true
            }
            ]
        };
        myChart.setOption(option);

        function jsShowHide(info) {
            if (info == 0) {
                myChart.clear();
            }
            else {
                myChart.setOption(option);
            }
        }
        function jsPushData(x, y, index) {
            option.xAxis.data.push(x);
            option.series[index].data.push(y);
            myChart.setOption(option);
        }

        function jsPushXData(x) {
            option.xAxis.data.push(x);
            myChart.setOption(option);
        }

        function jsPushYData(y, index) {
            option.series[index].data.push(y);
            myChart.setOption(option);
        }

         function jsShiftData(x, y, index) {
            option.xAxis.data.shift();
            option.series[index].data.shift();
            myChart.setOption(option);
        }

        function jsShiftXData(x) {
            option.xAxis.data.shift();
            myChart.setOption(option);
        }

        function jsShiftYData(y, index) {
            option.series[index].data.shift();
            myChart.setOption(option);
        }

        function jsSetDatas(xArray, yArray, index) {
            option.xAxis.data = JSON.parse(xArray);
            option.series[index].data = JSON.parse(yArray);
            myChart.setOption(option);
        }

        function jsSetXDatas(xArray) {
            option.xAxis.data = JSON.parse(xArray);
            myChart.setOption(option);
        }

        function jsSetYDatas(yArray, type, index) {
            option.series[index].data = JSON.parse(yArray);
            option.series[index].type = type;
            myChart.setOption(option);
        }

        function jsSetSmooth(smooth, index) {
            option.series[index].smooth = smooth;
            myChart.setOption(option);
        }

        function jsSetSize(x, y) {
            var main = document.getElementById('main')
            main.style.width = x + "px"
            main.style.height = y + "px"
            myChart.resize({ width: x, height: y });
        }

        function click1() {
            //var main = document.getElementById('main')
            //main.style.width = "500px"
            //main.style.height = "500px"
            //myChart.resize({ height: 500, width:500 });
            window.external.ShowMsg("這是一條信息,來自js,調用了C#");
        }

    </script>
</body>
</html>

XAML的代碼就是一個 WebBrowser 控件,用來顯示html網頁

  <WebBrowser Name="Web"></WebBrowser>

  C#調用的關鍵代碼

     Web.InvokeScript("jsSetSize", (int)(this.ActualWidth * 0.97), (int)(this.ActualHeight * 0.97));//設置echart大小

 Web.InvokeScript("jsSetXDatas", Newtonsoft.Json.JsonConvert.SerializeObject(Labels.Labels));//設置橫坐標的數據

   Web.InvokeScript("jsSetYDatas", Newtonsoft.Json.JsonConvert.SerializeObject(values.Values), values.Type, ValuesCollection.IndexOf(values));//設置縱坐標的數據

 

控件封裝好了,現在就是調用了Labels綁定橫坐標數據,ValuesCollection綁定縱坐標數據。

  <controls:LineEchart Labels="{Binding Labels}" ValuesCollection="{Binding ValuesCollection}"/>

是不是非常簡單,輕松MVVM使用。

 

 

整個東西還是相對比較簡單,歡迎大家下載源碼。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM