cari
Rumahpembangunan bahagian belakangTutorial C#.Net什么是MVVM架构和数据绑定?

什么是MVVM架构和数据绑定?

Jun 24, 2017 am 09:25 AM
mvvmdatafahammengikat

 

(申明:最近在做一个练习,写点东西,谨供参考。)

1、界面展示:其中的布局和样式就不说了,重点在MVVM架构和数据绑定(Model层使用EF(Entity Framework)实体框架,不做介绍)。

 

绑定后:

2、架构介绍:

在Views层中新建CusGroupEditWindow窗体,ViewModels中建立CusGroupEditViewModel类,在窗体的xaml或者cs中引用ViewModels对应类:

   xaml中:

    c879f5c3c9893e45ba2ce7d26e997114   

          92c72cd9b9c57deded9b4898c5a2dbe2 1da84c50fa7328704b2ce9dda53aedda     

      7473f81b006ddc8e53f2d378bc7dce62

  cs:DataContext = CusGroupEditViewModel。(添加引用路径)

/***********************************************/

*CsGroup是在ViewModel中定义的一个CusGroup对象,    *

*CusGroup对象是在SQL数据库中的表,在EF中的对象。    *

/***********************************************/

3、TextBox绑定:

  ff1681ddee25e4aeb6879b3c67fb00b5

4、Button绑定:

  5d362da14155c388b940c2445466edf6         

            29deedf2cd939b8bccbf37085c6a617a8b6de9c7d98b148f30b5dd6899a18be9

      a1cb88e6789f399807801ea3799938af 

dfca9557cc388af630eeba6df35e96f8

c05eec64ed02ad0975536668a09b61b7

5、CheckBox绑定:

  04efaf97de328fe03fc57ff1cb705f93

  456c2222d60e5b20af2a55c567b254f7 6、ComboBox绑定:

6、ComboBox绑定:

<ComboBox MaxWidth="150" Width="100" SelectedValue="{Binding StrCMBselectValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" DisplayMemberPath="Text"
                                              SelectedValuePath="Value" ItemsSource="{Binding LstCSGDownLevelID, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" />

 

 

 b33558531c9bd20894e37c6740957f48

65f8f648affa7f9bf7c2b3b9504200a2                                                 

7、DataGrid绑定:

<DataGrid ColumnWidth="*" SelectedItem="{Binding CurrentSelectItem}"  ItemsSource="{Binding CsGroupsAll}" AutoGenerateColumns="False"  IsReadOnly="True" >
                                <DataGrid.Columns>
                                    <DataGridTextColumn Header="分组编号" Binding="{Binding Code}" />
                                    <DataGridTextColumn Header="分组名称" Binding="{Binding Name}" />
                                </DataGrid.Columns>
                            </DataGrid>

 

/***************************************************************/

        //DataGrid当前选择对象private CusGroup currentSelectItem;public CusGroup CurrentSelectItem
        {get { return currentSelectItem; }set{
                currentSelectItem = value;

                GetCutCmbSelect(value);
            }
        }
View Code

 

3a102498773156c85fe31b421356ccfb

/***************************************************************/

 

ViewModel 中的代码:

   
   
using HeYin.ERP.DataModels;using HeYin.ERP.IServices;using HeYin.ERP.Models;using HeYin.ERP.Services;using Microsoft.Practices.Prism.Commands;using System;using System.Collections.Generic;using System.Collections.ObjectModel;using System.Windows;using System.Text.RegularExpressions;using System.Windows.Controls;namespace HeYin.ERP.Client.ViewModels.Customer
{class CusGroupEditViewModel : BaseViewModel
    {private bool bIsAdd = false;

        ICusGroupService CGS;  //调用IService接口#region Properties 属性private Guid gCsGroupID = Guid.Empty;//All CusGroupprivate List12a277596269c1ca26ae0578ebbecfb8 csGroupsAll;public List12a277596269c1ca26ae0578ebbecfb8 CsGroupsAll
        {get { return csGroupsAll; }set{
                csGroupsAll = value; //设定值OnPropertyChanged("CsGroupsAll"); //在属性更改后,通知            }
        }private List12a277596269c1ca26ae0578ebbecfb8 csGroupsMinPrestore;public List12a277596269c1ca26ae0578ebbecfb8 CsGroupsAllMinPrestore
        {get { return csGroupsMinPrestore; }set{
                csGroupsMinPrestore = value; //设定值OnPropertyChanged("CsGroupsAllMinPrestore"); //在属性更改后,通知            }
        }//CusGroup对象private CusGroup csGroup;public CusGroup CsGroup
        {get { return csGroup; }set{ csGroup = value;
                OnPropertyChanged("CsGroup"); }
        }/// 631fb227578dfffda61e1fa4d04b7d25/// /// 039f3e95db2a684c7b74365531eb6044private string strCMBselectValue;public string StrCMBselectValue
        {get { return strCMBselectValue; }set{if (value != null)
                {
                    strCMBselectValue = value;
                    OnPropertyChanged("StrCMBselectValue");
                }
            }
        }/// 631fb227578dfffda61e1fa4d04b7d25/// ComboBoxDataModel:作为一个ComboBox的对象,可以理解为数据源/// 039f3e95db2a684c7b74365531eb6044private ObservableCollection2584f245219aed0baedf79a7e59b6c50 lstCSGDownLevelID;public ObservableCollection2584f245219aed0baedf79a7e59b6c50 LstCSGDownLevelID
        {get { return lstCSGDownLevelID; }set{
                lstCSGDownLevelID = value;
                OnPropertyChanged("LstCSGDownLevelID");
            }
        }//DataGrid当前选择对象private CusGroup currentSelectItem;public CusGroup CurrentSelectItem
        {get { return currentSelectItem; }set{
                currentSelectItem = value;

                GetCutCmbSelect(value);
            }
        }private int errorCount;public int ErrorCount { get => errorCount; set => errorCount = value; }#endregion#region Commandspublic DelegateCommand98c455a79ddfebb79781bff588e7b37e BtnChangedCommand { get; set; }public DelegateCommand12a277596269c1ca26ae0578ebbecfb8 TxtChangedCommand { get; set; }        #endregionpublic CusGroupEditViewModel()
        {
            CGS = new CusGroupService();
            CsGroupsAll = new List12a277596269c1ca26ae0578ebbecfb8();
            csGroup = new CusGroup();
            LstCSGDownLevelID = new ObservableCollection2584f245219aed0baedf79a7e59b6c50();
            BtnChangedCommand = new DelegateCommand98c455a79ddfebb79781bff588e7b37e(MenuClick);
            TxtChangedCommand = new DelegateCommand12a277596269c1ca26ae0578ebbecfb8(ChangeCMBValue);

            GetAllCusGroups();
        }#region ButtonClickprivate void MenuClick(string strMessage)
        {if (string.IsNullOrEmpty(strMessage)) return;if (CsGroup == null) return;switch (strMessage)
            {case "btnCusGroupSave":
                    Save();break;case "btnCusGroupAdd":
                    Add();break;case "btnCusGroupDelete":
                    Delete();break;
            }
        }#endregion ButtonClick#region motheds/// 631fb227578dfffda61e1fa4d04b7d25/// 获取全部Group/// 039f3e95db2a684c7b74365531eb6044private void GetAllCusGroups()
        {//获取满足条件的客户分组信息            CsGroupsAll.Clear();
            CsGroupsAll = CGS.Get(s => s.IsDelete == 0);

            GetAllCMBItems();//给降档分组下拉框赋值if ((gCsGroupID == null || gCsGroupID == Guid.Empty) && CsGroupsAll.Count > 0)
                CsGroup = CsGroupsAll[0];    //给基础信息等赋值StrCMBselectValue = CsGroup.DownLevelID.ToString();//设置降档分组默认值        }/// 631fb227578dfffda61e1fa4d04b7d25/// 添加/// 039f3e95db2a684c7b74365531eb6044/// 871df4e675f01b90b299b5458b6fbd688bb7487ae6a16a43571bc14c7fcf93c2private void AddCusGroup(CusGroup cg)
        {
            cg.ID = Guid.NewGuid(); //新建分组GUIDcg.IsDelete = 0;        //默认为0:不删除cg.CreateBy = App.GetCurrentUserId();//创建人员关联员工 GUIDcg.CreateTime = DateTime.Now;  //初始化创建时间,应该使用服务器当前时间bool c = CGS.Add(cg);if (c)
            {
                MessageBox.Show(string.Format("创建新组别【{0}】成功!", CsGroup.Name), "提示", MessageBoxButton.OK, MessageBoxImage.Information);
                GetAllCusGroups();
                bIsAdd = false;
            }
        }/// 631fb227578dfffda61e1fa4d04b7d25/// 修改/// 039f3e95db2a684c7b74365531eb6044/// 871df4e675f01b90b299b5458b6fbd688bb7487ae6a16a43571bc14c7fcf93c2private void UpdateCusGroup(CusGroup cg)
        {
            bIsAdd = false;

            cg.UpdateTime = DateTime.Now;
            cg.UpdateBy = App.GetCurrentUserId();//更新人员关联员工 GUIDstring[] str = { "UpdateTime", "UpdateBy" };bool b = CGS.Edit(cg, str);if (b)
            {
                MessageBox.Show("更改组别【成功】!", "提示", MessageBoxButton.OK, MessageBoxImage.Information);
                GetAllCusGroups();
            }
        }/// 631fb227578dfffda61e1fa4d04b7d25///删除方法(实为更新)/// 039f3e95db2a684c7b74365531eb6044/// 871df4e675f01b90b299b5458b6fbd688bb7487ae6a16a43571bc14c7fcf93c2private void DeleteCusGroup(CusGroup cg)
        {
            cg.IsDelete = 1; //更改数据库删除标志cg.UpdateTime = DateTime.Now;  //更新删除时间cg.UpdateBy = App.GetCurrentUserId();//更新人员关联员工 GUIDstring[] str = { "UpdateTime", "IsDelete", "UpdateBy" };bool b = CGS.Edit(cg, str);if (b)
            {//MessageBox.Show(string.Format("已删除组别【{0}】!", CsGroup.Name), "提示", MessageBoxButton.OK, MessageBoxImage.Information);                GetAllCusGroups();
                CsGroup = new CusGroup(); //清空对象bIsAdd = true;
            }
        }/// 631fb227578dfffda61e1fa4d04b7d25/// 插入和更新方法调用/// 039f3e95db2a684c7b74365531eb6044private void Save()
        {if (ErrorCount > 0)
            {//判断必填数据是否为空:为空则提示MessageBox.Show("请核对所填数据", "提示", MessageBoxButton.YesNo, MessageBoxImage.Information);return;
            }if (bIsAdd)
                AddCusGroup(CsGroup);elseUpdateCusGroup(CsGroup);
        }/// 631fb227578dfffda61e1fa4d04b7d25/// 获取降档分组下拉列表的值,并指定默认值/// 039f3e95db2a684c7b74365531eb6044/// baf7518bd06a20614696879534a64e8e8bb7487ae6a16a43571bc14c7fcf93c2private void GetCutCmbSelect(CusGroup value)
        {
            bIsAdd = false;//点击新增后,再选择列表的逻辑if (value != null)
            {
                CsGroup = CGS.GetById(value.ID);//查找出当前选中的对象gCsGroupID = CsGroup.ID;        //保存当前选择对象的GUIDif (CsGroup != null)
                {if (CsGroup.DownLevelID.HasValue)
                    {//如果降档ID有值,则默认显示,如果没有,则显示为空GetExceptCMBSelect();//刷新下拉列表,先刷新,再赋值给默认值StrCMBselectValue = CsGroup.DownLevelID.ToString();
                    }else{
                        LstCSGDownLevelID.Clear();
                        StrCMBselectValue = string.Empty;
                    }
                }
            }
        }private void Add()
        {
            bIsAdd = true;//点击新建分组时,重新获取所有降档ID对应的中文名            GetAllCMBItems();

            CsGroup = new CusGroup();
        }private void Delete()
        {if (this.CsGroup.ID == Guid.Empty || CsGroup.ID == null)
                MessageBox.Show("请选择要删除组别", "提示", MessageBoxButton.OK, MessageBoxImage.Information);else{
                MessageBoxResult msgResult = MessageBox.Show(string.Format("确定要删除分组【{0}】吗?", CsGroup.Name), "提示", MessageBoxButton.YesNo, MessageBoxImage.Information);if (msgResult == MessageBoxResult.Yes)
                    DeleteCusGroup(CsGroup);
            }
        }/// 631fb227578dfffda61e1fa4d04b7d25/// 排除当前列的降档ID和对应的Name/// 039f3e95db2a684c7b74365531eb6044private void GetExceptCMBSelect()
        {
            LstCSGDownLevelID.Clear();
            CsGroupsAllMinPrestore = CGS.Get(s => s.IsDelete == 0 && s.MinPrestore <= CsGroup.MinPrestore);foreach (var iDlID in CsGroupsAllMinPrestore)
            {if (iDlID.ID != CsGroup.ID) //去除当前选择ID对应的NameLstCSGDownLevelID.Add(new ComboBoxDataModel() { Value = iDlID.ID.ToString(), Text = iDlID.Name });
            }
        }/// 631fb227578dfffda61e1fa4d04b7d25/// 获取列表中所有降档ID和对应的Name/// 039f3e95db2a684c7b74365531eb6044private void GetAllCMBItems()
        {
            LstCSGDownLevelID.Clear();foreach (var iDlID in CsGroupsAll)
            {
                LstCSGDownLevelID.Add(new ComboBoxDataModel() { Value = iDlID.ID.ToString(), Text = iDlID.Name });
            }
        }private void ChangeCMBValue(CusGroup cgMinPrestore)
        {
            LstCSGDownLevelID.Clear();
            List12a277596269c1ca26ae0578ebbecfb8 lstTextChange = new List12a277596269c1ca26ae0578ebbecfb8();
            lstTextChange = CGS.Get(s => s.MinPrestore < cgMinPrestore.MinPrestore);foreach (var iDlID in lstTextChange)
            {
                LstCSGDownLevelID.Add(new ComboBoxDataModel() { Value = iDlID.ID.ToString(), Text = iDlID.Name });
            }
        }public void SizeChangedCommand(object obj, SizeChangedEventArgs e)
        {

            MessageBox.Show("日了狗");

        }#endregion}
}

 

View中代码:



    
        
            
        
    

    

        
            
            
        

        
            
                
                
            

            
            
                
                    
                        
                            
                                
                                

                                
                            
                        
                    

                    
                        
                            <DataGrid ColumnWidth="*" SelectedItem="{Binding CurrentSelectItem}"  ItemsSource="{Binding CsGroupsAll}" AutoGenerateColumns="False"  IsReadOnly="True" >
                                <DataGrid.Columns>
                                    <DataGridTextColumn Header="分组编号" Binding="{Binding Code}" />
                                    <DataGridTextColumn Header="分组名称" Binding="{Binding Name}" />
                                </DataGrid.Columns>
                            </DataGrid>
                        
                    
                
            

            
            
                
                    
                    
                    
                

                
                
                    
                        
                            
                        

                        
                            
                                
                                    
                                    
                                

                                
                                
                                    
                                    
                                        
                                            
                                                
                                                    
                                                    
                                                
                                            
                                        
                                    
                                

                                
                                    
                                    
                                        
                                            
                                                
                                                    
                                                    
                                                
                                            
                                        
                                    
                                
                            

                            
                                
                                    

                                    
                                        
                                            
                                                
                                                    
                                                    
                                                
                                            
                                        
                                    
                                
                            
                        
                    
                

                
                
                    
                        
                            
                                
                            

                            
                                
                                    
                                    
                                

                                
                                    
                                    
                                
                                
                                    
                                    
                                
                            
                        
                    
                

                
                
                    
                        
                            
                        

                        
                            
                                
                                    
                                    
                                

                                
                                    
                                    
                                
                                
                                    
                                    
                                
                            

                            
                                
                                    
                                    <ComboBox MaxWidth="150" Width="100" SelectedValue="{Binding StrCMBselectValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" DisplayMemberPath="Text"
                                              SelectedValuePath="Value" ItemsSource="{Binding LstCSGDownLevelID, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" />
                                
                            
                        
                    
                
            
        

        
        
            
                
            
        
    

 

Atas ialah kandungan terperinci 什么是MVVM架构和数据绑定?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Ekosistem .NET: Peranan C#dan seterusnyaEkosistem .NET: Peranan C#dan seterusnyaMay 03, 2025 am 12:04 AM

C# memainkan peranan utama dalam ekosistem .NET dan merupakan bahasa pilihan untuk pemaju. 1) C# menyediakan kaedah pengaturcaraan yang cekap dan mudah digunakan, menggabungkan kelebihan C, C dan Java. 2) Melaksanakan melalui .NET Runtime (CLR) untuk memastikan operasi silang platform yang cekap. 3) C# menyokong asas untuk penggunaan lanjutan, seperti LINQ dan pengaturcaraan asynchronous. 4) Pengoptimuman dan amalan terbaik termasuk menggunakan StringBuilder dan pengaturcaraan asynchronous untuk meningkatkan prestasi dan penyelenggaraan.

C# sebagai bahasa .net: asas ekosistemC# sebagai bahasa .net: asas ekosistemMay 02, 2025 am 12:01 AM

C# adalah bahasa pengaturcaraan yang dikeluarkan oleh Microsoft pada tahun 2000, yang bertujuan untuk menggabungkan kuasa C dan kesederhanaan Java. 1.C# adalah bahasa pengaturcaraan yang berorientasikan objek, yang menyokong enkapsulasi, warisan dan polimorfisme. 2. Proses penyusunan C# menukarkan kod tersebut ke dalam bahasa pertengahan (IL), dan kemudian menyusunnya ke dalam pelaksanaan kod mesin dalam persekitaran runtime .NET (CLR). 3. Penggunaan asas C# termasuk pengisytiharan berubah -ubah, aliran kawalan dan definisi fungsi, sementara penggunaan lanjutan meliputi pengaturcaraan asynchronous, LINQ dan perwakilan, dan lain -lain. 5. Cadangan Pengoptimuman Prestasi termasuk penggunaan LINQ, pengaturcaraan asynchronous, dan meningkatkan kebolehbacaan kod.

C# vs.NET: Menjelaskan perbezaan dan persamaan utamaC# vs.NET: Menjelaskan perbezaan dan persamaan utamaMay 01, 2025 am 12:12 AM

C# adalah bahasa pengaturcaraan, manakala .NET adalah rangka kerja perisian. 1.C# dibangunkan oleh Microsoft dan sesuai untuk pembangunan pelbagai platform. 2..NET menyediakan perpustakaan kelas dan persekitaran runtime, dan menyokong pelbagai bahasa. Kedua -dua bekerja bersama untuk membina aplikasi moden.

Di luar gembar -gembur: Menilai peranan semasa C# .netDi luar gembar -gembur: Menilai peranan semasa C# .netApr 30, 2025 am 12:06 AM

C# .NET adalah platform pembangunan yang kuat yang menggabungkan kelebihan bahasa C# dan .NET. 1) Ia digunakan secara meluas dalam aplikasi perusahaan, pembangunan web, pembangunan permainan dan pembangunan aplikasi mudah alih. 2) Kod C# disusun menjadi bahasa pertengahan dan dilaksanakan oleh persekitaran runtime .NET, menyokong pengumpulan sampah, jenis keselamatan dan pertanyaan Linq. 3) Contoh penggunaan termasuk output konsol asas dan pertanyaan Linq maju. 4) Kesalahan biasa seperti rujukan kosong dan kesilapan penukaran jenis boleh diselesaikan melalui debuggers dan pembalakan. 5) Cadangan Pengoptimuman Prestasi termasuk pengaturcaraan dan pengoptimuman pertanyaan Linq. 6) Walaupun persaingan, C#.NET mengekalkan kedudukan pentingnya melalui inovasi berterusan.

Masa Depan C# .NET: Trend dan PeluangMasa Depan C# .NET: Trend dan PeluangApr 29, 2025 am 12:02 AM

Trend masa depan C#.NET terutamanya tertumpu pada tiga aspek: pengkomputeran awan, microservices, AI dan integrasi pembelajaran mesin, dan pembangunan silang platform. 1) Pengkomputeran awan dan microservices: C#.NET mengoptimumkan prestasi persekitaran awan melalui platform Azure dan menyokong pembinaan seni bina microservice yang cekap. 2) Integrasi AI dan Pembelajaran Mesin: Dengan bantuan Perpustakaan ML.NET, pemaju C# boleh membenamkan model pembelajaran mesin dalam aplikasi mereka untuk mempromosikan pembangunan aplikasi pintar. 3) Pembangunan silang platform: Melalui .Netcore dan .NET5, C# Aplikasi boleh dijalankan pada Windows, Linux dan MacOS, memperluaskan skop penempatan.

C# .NET Pembangunan Hari Ini: Trend dan Amalan TerbaikC# .NET Pembangunan Hari Ini: Trend dan Amalan TerbaikApr 28, 2025 am 12:25 AM

Perkembangan terkini dan amalan terbaik dalam pembangunan C#. NET termasuk: 1. Pengaturcaraan Asynchronous meningkatkan respons aplikasi, dan memudahkan kod yang tidak menyekat menggunakan async dan menunggu kata kunci; 2. LINQ menyediakan fungsi pertanyaan yang kuat, memanipulasi data dengan cekap melalui pelaksanaan dan pokok ekspresi yang tertunda; 3. Cadangan Pengoptimuman Prestasi termasuk menggunakan pengaturcaraan asynchronous, mengoptimumkan pertanyaan LINQ, memori pengurusan rasional, meningkatkan kebolehbacaan dan penyelenggaraan kod, dan ujian unit penulisan.

C# .NET: Membina aplikasi dengan ekosistem .NETC# .NET: Membina aplikasi dengan ekosistem .NETApr 27, 2025 am 12:12 AM

Bagaimana Membina Aplikasi Menggunakan .NET? Membina aplikasi menggunakan .NET boleh dicapai melalui langkah-langkah berikut: 1) Memahami asas-asas .NET, termasuk C# bahasa dan sokongan pembangunan silang platform; 2) mempelajari konsep teras seperti komponen dan prinsip kerja ekosistem .NET; 3) menguasai penggunaan asas dan lanjutan, dari aplikasi konsol mudah ke operasi WebAPIS dan pangkalan data yang kompleks; 4) terbiasa dengan kesilapan biasa dan teknik debugging, seperti konfigurasi dan isu sambungan pangkalan data; 5) Pengoptimuman prestasi aplikasi dan amalan terbaik, seperti pengaturcaraan dan caching asynchronous.

C# sebagai bahasa yang serba boleh. NET: Aplikasi dan contohC# sebagai bahasa yang serba boleh. NET: Aplikasi dan contohApr 26, 2025 am 12:26 AM

C# digunakan secara meluas dalam aplikasi peringkat perusahaan, pembangunan permainan, aplikasi mudah alih dan pembangunan web. 1) Dalam aplikasi peringkat perusahaan, C# sering digunakan untuk ASP.Netcore untuk membangunkan WebAPI. 2) Dalam pembangunan permainan, C# digabungkan dengan enjin Perpaduan untuk merealisasikan kawalan peranan dan fungsi lain. 3) C# menyokong polimorfisme dan pengaturcaraan tak segerak untuk meningkatkan fleksibiliti kod dan prestasi aplikasi.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

MantisBT

MantisBT

Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

MinGW - GNU Minimalis untuk Windows

MinGW - GNU Minimalis untuk Windows

Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

mPDF

mPDF

mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular