当前位置:编程学习 > C#/ASP.NET >>

跟我学WPF:M-V-VM模式开发

看到这个论坛里探讨WPF技术的朋友甚少,而这又是个非常非常不错的Windows App开发技术,所以在下就此开一贴,抛砖引玉,望能激发各位积极性。现在太晚,如果大家感兴趣就先回复回复,如果看到有想学的朋友,我将在这个帖子里进行详细讲解。 --------------------编程问答-------------------- 期待。。。。。。 --------------------编程问答-------------------- 等待楼主的讲解。。..... --------------------编程问答-------------------- 哈哈。。。
LZ这奉献精神。。
M-V-VM
整错板块了。。

你改去Silverlight板。。 --------------------编程问答-------------------- --------------------编程问答-------------------- 不错,这2天看了相关的一些知识,以及和MVC,MVP的关系,区别。

希望LZ介绍的话不要只从MVVM介绍,如果可以的话 希望从WPF为什么要使用MVVM而不使用其他的,使用MVVM依赖于WPF的什么特性,SL是否能完全实现。

另外希望介绍WINFORM的事件模式,讨论很多的3层或多层模型 ,他们与MVVM直接的实现和优缺点。当然有例子最好了。我想这也是没有了解过MVC,MVVM的人最想了解的 --------------------编程问答-------------------- 从15年前的winform,到最近10年(比如asp.net从1.0版中就已经有了),微软就一直有one-way/two-way的Binding技术。只是初学者都以“咱是初学者,咱最大”为理由而不去理解。 --------------------编程问答-------------------- --------------------编程问答-------------------- 竟然有人回复!好,我就抛砖了。下面开始。首先回复一下wxr0323: 我是觉得这个版面大家都在问WinForm,希望能让大家关注下WPF,所以就发在这个区。下面正式开始……一上来就扔代码会让很多人觉得烦,所以我就先搞点文字的介绍————当然我不会去Google随便复制粘贴点东西过来,我主要说一下我的理解。如果有人觉得误人子弟,可以在下面进行“批斗”和纠正。

在我写这个东西的时候,已经有许多人开始尝试WPF了。但问题是,其中不少人依旧只是在Designer里直接拖拽一堆控件,然后自动生成XAML,最后再双击不同的控件来添加code behind (也就是后台代码)。这样一来,你会发现WPF跟WinForm之间没有什么区别,WPF就成了XAML版的WinForm而已,只不过它披着Win7UI的皮。其实事实并非如此,虽然理论上来讲,WPF能做的事情WinForm也能做,但是其二者在实现思想和方法上是截然不同的。

WinForm,不太负责任来讲(抱歉了),是靠事件驱动来完成UI与UI之间,UI与数据之间的互动的————这样就产生了一个潜在问题:这种模式其实有点像面向过程编程,随之而来的问题便是代码的维护性和重用性。当然,这并不是在抨击WinForm,直到今天它仍然在许多方面有自己的用处。

再来看WPF。为什么MVVM模式会被许多开发者作为首选(其实基本上是必选)?这就得从理解这四个字母的意思开始。MVVM实际上是M-V-VM:M即Model,V即View,VM即ViewModel。Model说白了就是一堆关于数据的类,View说白了就是UI,也就是XAML。重点在于ViewModel,而这也是MVVM的核心所在。ViewModel把UI和数据联接起来,使其二者可以自由通话。这样既减轻了数据与UI的耦合,又将UI抽象成了一个实体类,可以最大限度的实现面向对象编程————面向对象的好处我想我不必多说。

说了这么一堆,我还是没有真正涉及MVVM,原因在于,首先初学者要对WPF的数据邦定有个大概了解。就像sp1234说的,很久以前Data Binding就存在了,可是有多少人真正认真去研究过呢?

一 一切的开始:DataContext
这算是这篇教程的第一章。我们来研究一个很简单的案例。首先,添加一个新的WPF Project,名叫DataContextSample。然后添加一个Student类,如下:

namespace DataContextSample
{
    internal class Student
    {
        #region Properties
        public string Name
        {
            get;
            set;
        }
        #endregion // Properties
    }
}


打开你的MainWindow.xaml,然后复制粘贴我的代码:

<Window x:Class="DataContextSample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <StackPanel Orientation="Horizontal" VerticalAlignment="Center">
            <Label>Name:</Label>
            <TextBox x:Name="NameTextBox" Height="23" Width="150" />
            <Button x:Name="ShowNameButton" Margin="2,0">Show Me Name</Button>
        </StackPanel>
    </Grid>
</Window>


我们的目标是:运行程序后,给MainWindow传递一个Student对象,然后让用户在TextBox中改变该对象的Name,最后点击按钮后,将改变后的Name用MessageBox返回给用户。我们先来看一下用WinForm模式如何做到这一点。

打开你的MainWindow.xaml.cs,复制粘贴我的代码:

using System.Windows;

namespace DataContextSample
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        #region Fields
        private readonly Student _student;
        #endregion // Fields

        #region Constructors
        public MainWindow()
        {
            _student = new Student() { Name = "New Student" };
            InitializeComponent();
            this.ShowNameButton.Click += this.ShowNameButton_Click;
            this.Loaded += this.OnLoaded;
        }
        #endregion // Constructors

        #region Event Handlers
        private void OnLoaded(object sender, RoutedEventArgs e)
        {
            NameTextBox.Text = _student.Name;
        }

        private void ShowNameButton_Click(object sender, RoutedEventArgs e)
        {
            _student.Name = NameTextBox.Text;
            MessageBox.Show(_student.Name);
        }
        #endregion // Event Handlers
    }
}


运行程序,尝试在TextBox里输入不同的名字,然后点击"Show Me Name",看看是否达到了我们预期目标。这个程序可能看起来很傻,有人会问:干嘛不直接输出NameTextBox里的东西?别介意,这就是个小例子,我希望有通过这个Student类向大家展示WPF中UI是如何与数据交互的。相信WinForm的做法大家都理解,无非就是在MainWindow加载之后将Student的Name赋给NameTextBox,然后在点击按钮的事件中,将NameTextBox的Text传给Student,再返回给用户。

但是,此问题还有另一种解法。下面打开MainWindow.xaml,将代码改成:

<Window x:Class="DataContextSample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <StackPanel Orientation="Horizontal" VerticalAlignment="Center">
            <Label>Name:</Label>
            <TextBox Text="{Binding Path=Name, Mode=TwoWay}" Height="23" Width="150" />
            <Button x:Name="ShowNameButton" Margin="2,0">Show Me Name</Button>
        </StackPanel>
    </Grid>
</Window>


然后将MainWindow.xaml.cs中代码改称:

using System.Windows;

namespace DataContextSample
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        #region Fields
        private readonly Student _student;
        #endregion // Fields

        #region Constructors
        public MainWindow()
        {
            _student = new Student() { Name = "New Student" };
            InitializeComponent();
            this.DataContext = _student;
            this.ShowNameButton.Click += this.ShowNameButton_Click;
        }
        #endregion // Constructors

        #region Event Handlers
        private void ShowNameButton_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show(_student.Name);
        }
        #endregion // Event Handlers
    }
}


再次运行程序,你会发现我们也达到了预期的效果。如果对比两种方法,你可能会说:后一种无非就被前一种少写了个OnLoaded,以及省去了_student.Name = NameTextBox.Text。别急,前面说过了,这只是个小例子,往往小事情可以反映大变化。虽然我们在代码量上的变动微乎其微,但是背后的思想却截然不同。我先打这么多,等会儿再来解释。 --------------------编程问答-------------------- <TextBox Text="{Binding Path=Name, Mode=TwoWay}" Height="23" Width="150" />
_student = new Student() { Name = "New Student" };
一看到这里,我就不想往下看了
糟糕的设计,
或者说,这根本谈不上设计,就更不要奢谈面向对象设计了 --------------------编程问答--------------------
引用 9 楼 microtry 的回复:
<TextBox Text="{Binding Path=Name, Mode=TwoWay}" Height="23" Width="150" />
_student = new Student() { Name = "New Student" };
一看到这里,我就不想往下看了
糟糕的设计,
或者说,这根本谈不上设计,就更不要奢谈面向对象设计了


你可能没看我的文字说明,这个例子只是简单说一下DataContext的概念,这里面根本不存在任何设计……我不是来展示我的设计的。对于初学者来说,首先要做的是理解概念。而且对于这样一个简单的需求的例子,又何必去用什么设计,能说明问题即可。 --------------------编程问答-------------------- --------------------编程问答--------------------
引用 9 楼 microtry 的回复:
<TextBox Text="{Binding Path=Name, Mode=TwoWay}" Height="23" Width="150" />
_student = new Student() { Name = "New Student" };
一看到这里,我就不想往下看了
糟糕的设计,
或者说,这根本谈不上设计,就更不要奢谈面向对象设计了

如果你想借你的回复来使我难堪,从而显示你的高明,你的方式还是欠妥: 1 如果你有更好更简单的例子来说明DataContext,你可以贴出来让大家学习探讨。 2 这里不是代码秀。非要秀代码也可以,我可以把十多年以来的各种设计都搬出来(其中5年在微软),你想难堪么? --------------------编程问答-------------------- 楼主有心,可以整理一下写成博客文章嘛.. --------------------编程问答-------------------- 我声明一点:我写这些东西没有任何回报。我是说过,如果我误人子弟,你可以批斗和纠正,但前提是你要看完我写的东西,并且拿出你的理由。像microtry这种没有任何来由的“批斗”,我会不遗余力的反击。红星的可能看不惯绿裤衩来教别人?呵呵,那您接着看不惯。 --------------------编程问答-------------------- --------------------编程问答-------------------- 虽然我现在没有接触WPF,但是我依然支持此贴能继续下去,为一些没有WPF经验和准备学WPF的人做好一定的基础,强力支持此贴继续,对于渴望知识的人,有益无害不是么?
--------------------编程问答--------------------
引用 16 楼 wjfwd2009 的回复:
虽然我现在没有接触WPF,但是我依然支持此贴能继续下去,为一些没有WPF经验和准备学WPF的人做好一定的基础,强力支持此贴继续,对于渴望知识的人,有益无害不是么?


多谢支持。我会继续。 --------------------编程问答-------------------- 毕竟WPF号称是下一代的windows应用编程框架。支持lz继续。
不过lz要从头开始,这困难太大了。
binding里最重要的dp的应用,就够开几个帖子了。 --------------------编程问答--------------------
引用 18 楼 fangxinggood 的回复:
毕竟WPF号称是下一代的windows应用编程框架。支持lz继续。
不过lz要从头开始,这困难太大了。
binding里最重要的dp的应用,就够开几个帖子了。


多谢支持。也没有要都讲,就是把最基础的MVVM模式的思想介绍一下,然后让初学者自己去研究更多的东西。Dependency Property算是WPF自己的东西了,可以先不放在MVVM里。如果MVVM能讲完,我再讲这些其他WPF相关的。 --------------------编程问答-------------------- 从楼主的标题,我是这么理解:
1.你是老师(如果你说你是学生,我那样要求确实苛刻了);
2.跟你学MVVM设计模式(这是从类似MVC/MVP衍生来的分层设计的模式)
 (职责分离和引入虚拟组件改善其他组件之间的驱动关系是这一类设计模式的核心思想);
3.我挑出最典型的2行代码说明设计上的问题,
 (我以为你会用实际项目的代码教学,所以提出质疑,原来你的意思是实际上你不这样写代码);
4.甭说在微软5年,有的人下一辈子棋都没有长进;
5.如果我哪一条说的不是事实,或者针对楼主本人妄加评论,请指正,拿出你的观点驳倒我,我不会难堪,反而会很高兴,我从来就是菜鸟,但我绝不盲从大牛的观点,有不同意见我绝对态度鲜明的提出;
6.如果搞人身攻击,我就不奉陪了 --------------------编程问答-------------------- 顶一下 不知道这个在小项目中使用的怎么样 ?对这个还不了解 太要去学习 目前就在用MVC 也在学SL --------------------编程问答--------------------
引用 20 楼 microtry 的回复:
从楼主的标题,我是这么理解:
1.你是老师(如果你说你是学生,我那样要求确实苛刻了);
2.跟你学MVVM设计模式(这是从类似MVC/MVP衍生来的分层设计的模式)
 (职责分离和引入虚拟组件改善其他组件之间的驱动关系是这一类设计模式的核心思想);
3.我挑出最典型的2行代码说明设计上的问题,
 (我以为你会用实际项目的代码教学,所以提出质疑,原来你的意思是实际上你不这样写代码);
……

我不会用实际项目的代码来教学,因为初学者不会理解。如果一个人连DataContext都还没搞懂,那些所谓的项目代码对教学能起到什么帮助?我不知道你的水平,但我不是菜鸟,所以我敢出来抛砖。我不是对你否定我有意见,我对你的看法是:你没有读完我写的东西,然后挑出那两行代码来说什么设计不设计的问题——根本就是无稽之谈。因为那就是一个很简单的例子,让初学者明白DataContext的属性是可以用XAML语言来双向绑定的。你是面向实际项目,而我是面向初学者。不是任何一个初学者都渴望一开始看到成千上万看起来相当宏大的所谓实际项目的代码,那对他们一点帮助都没有。我重申:我上面写的代码不含任何可以借鉴的设计思想,目的只是给初学者一个很简单的例子,毕竟纯文字的东西太枯燥。

有人下了一辈子棋都没有长进——我是什么背景什么水平不需要你来质疑。这个帖子,有人觉得有用,希望我继续下去,我就会继续。你不满意可以离开,因为我和你没有任何瓜葛。你现在可能还不明白:教学不等同于展示实际项目的代码,尤其是在初期阶段。上面这个例子,我会一点一点展开来改善,目的是让初学者循序渐进的理解整个过程。你这么喜欢质疑我,你可以直接抛个你的项目代码上来,你看初学者能接受不?说白了不就是那些东西么,我这十几年比你见的可能不只多一点了,你还是少在那里跟我叫嚣吧。
--------------------编程问答--------------------
引用 20 楼 microtry 的回复:
5.如果我哪一条说的不是事实,或者针对楼主本人妄加评论,请指正,拿出你的观点驳倒我,我不会难堪,反而会很高兴,我从来就是菜鸟,但我绝不盲从大牛的观点,有不同意见我绝对态度鲜明的提出;


你说的哪一条都是事实,你赢了。你非要说一个Hello World级程序设计有问题,那我也无话可说。你怎么不说没用接口,泛型呢,你怎么不说没有给TextBox设置ValidationRule呢,你怎么不说我没处理异常呢——万一用户输入的时候晕倒,此程序应该立刻处理这个异常并给用户叫一辆救护车啊。那我接下来就粘贴项目代码吧。
--------------------编程问答-------------------- ms跑题了。谁也别纠结了。继续吧。 --------------------编程问答-------------------- 呵呵,人家没说:跟我学hello world:XXX模式开发 --------------------编程问答--------------------
引用 25 楼 microtry 的回复:
呵呵,人家没说:跟我学hello world:XXX模式开发


哎哟,大侠,我错了。我真是不该写那个Hello World。如果我有幸教您的话,我一定会用Goodbye World. --------------------编程问答-------------------- 如果存在误导他人,我觉得大家可以指正批评。但我不清楚,为什么要“阻止”别人分享? --------------------编程问答-------------------- 已经因为口水战跑题了。不战了,我投降,但是有人还想看,所以我继续误人子弟. --------------------编程问答-------------------- --------------------编程问答-------------------- 讲课总是要由浅入深的,楼主讲解的很好,循循善诱的有传统的Winform引入到WPF。然后让人理解WPF比Winform的优势是什么,然后说模式,很好的。某些人应该有心理疾病,喜欢钻牛角。楼主可以继续。 --------------------编程问答-------------------- 问下你多长时间会出一章,看了内容感觉还好,能说明问题就行,没必要搞多么高深,大家都是从Hello World! 开始的,不必纠结。 --------------------编程问答--------------------
引用 31 楼 retis 的回复:
问下你多长时间会出一章,看了内容感觉还好,能说明问题就行,没必要搞多么高深,大家都是从Hello World! 开始的,不必纠结。

我一般周末会有时间来补充。现在接着讲。我们主要来关注上面问题的第二种解法。这种解法的重点在于:我们没有在ShowNameButton_Click方法中将NameTextBox的值传给Student对象,那么Student的Name到底是如何被改变的?在OnLoaded方法中,有一句很关键:this.DataContext = _student;这里,我们终于看到了DataContext,那么就来聊以聊它。

Context本身的意思是环境,背景等。那么DataContext直接翻译过来便是数据背景/环境的意思。在WPF中,每一个控件都有一个类型为object的DataContext属性。为什么是object?因为object是所有类型的根,也就是说DataContext支持所有类型的对象。一旦我们的MainWindow有了自己的DataContext,也就是Student,它便明白在XAML中的数据邦定了。

<TextBox Text="{Binding Path=Name, Mode=TwoWay}" Height="23" Width="150" />

这行代码也很关键,它起到的作用是通知这个TextBox:你被绑定到了当前DataContext的Name属性上。一旦Name属性被绑定,并且Mode为双向,并且被绑定的类(即Student)的Name属性可以被外界改变,那么NameTextBox便会自动将其Text的值传给Student的Name,这一切都不需要任何后台代码——非常简洁。并且这种绑定是可以识别不同数据类型的。比如:你可以给Student加一个Int的Age属性,然后将其绑定到另一个TextBox上,你会发现尽管你输入的数据类型为string的"32","18"种类,Age属性还是会被安全赋值,因为WPF为你做了中间的转型工作(关于转换的问题以后再讲,不要急)。

现在你应该对DataContext有一个大概认识了——主要就是方便数据绑定。但是,我们还有许多问题没有解决。比如:NameTextBox既然已被绑定,那么它怎么知道什么时候传值给Student?是在每次自身TextChanged的时候,还是在自己LostFocus的时候,等等,以及是否只存在双向绑定……所有这些问题,都是关于绑定的问题,我们留到下一章讲。

DataContext的入门暂时讲道这里,留个小作业:给Student多加几个属性,然后试着用不同的控件去绑定。比如:给Student加一个性别属性(数据类型你可以自定),再添两个RadioButton,各为Male和Female,然后看你能否把性别属性成功绑定到这两个RadioButton上(方法不只一种,我们下次来讲邦定的时候再看看到底有多少方法,并且找出比较好的方法)。

如果想学WPF的人,认真读完我写的东西,应该会有所帮助,你们坚持学,我也坚持写,谢谢大家支持。 --------------------编程问答-------------------- 我想知道在xp下怎么把字体弄清晰一点... --------------------编程问答--------------------
引用 33 楼 karascanvas 的回复:
我想知道在xp下怎么把字体弄清晰一点...


你这个问题实在太模糊了。。。。怎么回答啊 --------------------编程问答-------------------- 好贴,看来需要学习这方面的东西了。 --------------------编程问答--------------------
引用 34 楼 ktei2008 的回复:
引用 33 楼 karascanvas 的回复:

我想知道在xp下怎么把字体弄清晰一点...


你这个问题实在太模糊了。。。。怎么回答啊


wpf的界面,字体都被柔化平滑的太模糊了,能设置成像winform一样嘛? --------------------编程问答-------------------- 没有用wpf,但为什么用这个例子开始,到目前为止看不出跟winform的区别。

winform的control类都有这个databinding的机制嘛,效果一样,能否解释一下? --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 你的Student类都没实现INotifyPropertyChanged接口,绑定了也不是预期的效果。。 --------------------编程问答-------------------- 除非使用依赖属性。。。 --------------------编程问答-------------------- 这个帖子为什么不推荐呢?
感谢楼主的分享精神~~ --------------------编程问答-------------------- 某些人都没明白mvvm是怎么回事,就说这是一个糟糕的设计,mvvm可以说是专门为WPF/SL定制的,做winform和asp.net的根本没必要去了解,在winform和asp.net实现mvvm简直是吃力不讨好;所谓存在即合理,这里讨论和使用wpf尚且都少,更何况mvvm了,微软刚推出的SL5专门针对mvvm模式加强了绑定方面的功能,可以说mvvm已经深入人心。

总之,在csdn争论这个问题太没必要了,万事开头难,我看楼主也是初学,不用在乎别人怎么说,这里找不到解决方法,可以Google国外的资料,国外这方面的资料相当多,还可以学学英文 --------------------编程问答--------------------
引用 40 楼 fallincloud 的回复:
你的Student类都没实现INotifyPropertyChanged接口,绑定了也不是预期的效果。。


你所谓的预期效果是指什么呢?我还没有讲到用ViewModel去改变UI,所以不需要INotifyPropertyChanged接口。后面我会慢慢讲到,或者不打算讲了,因为没钱拿,呵呵。 --------------------编程问答--------------------
引用 43 楼 duanzilin 的回复:
某些人都没明白mvvm是怎么回事,就说这是一个糟糕的设计,mvvm可以说是专门为WPF/SL定制的,做winform和asp.net的根本没必要去了解,在winform和asp.net实现mvvm简直是吃力不讨好;所谓存在即合理,这里讨论和使用wpf尚且都少,更何况mvvm了,微软刚推出的SL5专门针对mvvm模式加强了绑定方面的功能,可以说mvvm已经深入人心。

总之,在csdn争论这个……

哦,我这人最大优点是不谦虚。初学倒不敢说,做WPF也有3年了。其实在微软的时候就已经开始了。我写的拙劣的例子只是给没入门的人看的。倒没想到一些所谓的自己觉得是大牛的人非要过来指点江山,所以我也没什么兴趣再写了。 --------------------编程问答--------------------
引用 41 楼 fallincloud 的回复:
除非使用依赖属性。。。


那不叫依赖属性,叫DependencyProperty。你WPF基本还没入门,先别来这里向新人显示自己。

INotifyPropertyChanged接口的作用无非就是让UI能察觉到属性的变化,由此来自动升级自己的显示。如果没有继承此接口,那至少可以做到ToSource的绑定——而我的例子就是只想实现单方而已。
至于你说的DependencyProperty,它的作用根我的例子毫无关系——这是另一个话题了。 --------------------编程问答-------------------- 楼主的攻击性很强 --------------------编程问答-------------------- 一个学习的地方,不应该这样……取各家所长,补己之短。这样该有多好。都明白了,或者不需要这样的东西的,完全可以无视。应该有一些从基础开始的东西,照顾一下我们这些菜鸟。 --------------------编程问答-------------------- --------------------编程问答--------------------
引用 46 楼 ktei2008 的回复:
引用 41 楼 fallincloud 的回复:

除非使用依赖属性。。。


那不叫依赖属性,叫DependencyProperty。你WPF基本还没入门,先别来这里向新人显示自己。

INotifyPropertyChanged接口的作用无非就是让UI能察觉到属性的变化,由此来自动升级自己的显示。如果没有继承此接口,那至少可以做到ToSource的绑定——而我的例子就是只想实现单……


DependencyProperty官方的叫法是依赖项属性,大多数人都叫依赖属性,叫什么不能显示水平高低;
我以前是做winform和asp.net,也是刚入门,今年1月才开始接触wpf和SL,深知wpf/sl的编程方式的转变对于初学者来说是多么不易,但是过了最初这段时间就会发现wpf相对于winform的优势之处。

csdn论坛对wpf的冷落确实很另人意外,看看国外著名问答网stackoverflow,作为一门较新的技术,C#类别最新的wpf问题数量已经跟winform相当,而且跟帖数已经大大超过winform,再看看我们的csdn,真是太可怜

反正LZ也不想写了,还是结贴了,可以看出来这里有些人对wpf是有成见的,没必要做过多讨论了 --------------------编程问答--------------------
引用 50 楼 duanzilin 的回复:
引用 46 楼 ktei2008 的回复:
引用 41 楼 fallincloud 的回复:

除非使用依赖属性。。。


那不叫依赖属性,叫DependencyProperty。你WPF基本还没入门,先别来这里向新人显示自己。

INotifyPropertyChanged接口的作用无非就是让UI能察觉到属性的变化,由此来自动升级自己的显示。如果没有继承此接口,那至少可以做到T……


老兄,其实我强调那个叫什么完全是调侃,没有其他意思。我是比较反感那些明明自己已经不是初学者,却还非要进这个帖子找事的人。我想了一下,自己讲述的方法有问题,所以打算另开一贴,用个新的方法讲。 --------------------编程问答--------------------
引用 48 楼 kingdom_0 的回复:
一个学习的地方,不应该这样……取各家所长,补己之短。这样该有多好。都明白了,或者不需要这样的东西的,完全可以无视。应该有一些从基础开始的东西,照顾一下我们这些菜鸟。

说的对,我会另开一贴,不再攻击,写些真正有用的。 --------------------编程问答-------------------- 激发各位积极性 --------------------编程问答-------------------- --------------------编程问答--------------------            这样只是讨论不是学习吧 --------------------编程问答-------------------- 每天跟着学~~ 加油 --------------------编程问答-------------------- 学习下,看看怎么样 --------------------编程问答-------------------- 楼主好有奉献精神哦,支持你往下讲 --------------------编程问答-------------------- 虽然在业界也混了小20年,但WPF的概念我是今天第一次见到,特意仔细看了看相关资料,不看不知道,一看吓一跳,如果这家伙成了气候,所有基于HTTP的web技术的路也就该到头了,那些搞什么双核浏览器的也就没啥搞头了。 不过不管怎么样,目前winform编程也好web编程也好,所开发的软件界面层与业务层分开的越彻底,今后受到的冲击会越小,却是现实的。 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 再次跟帖,鼓励。 --------------------编程问答-------------------- --------------------编程问答--------------------
引用 30 楼 aofengdaxia 的回复:
讲课总是要由浅入深的,楼主讲解的很好,循循善诱的有传统的Winform引入到WPF。然后让人理解WPF比Winform的优势是什么,然后说模式,很好的。某些人应该有心理疾病,喜欢钻牛角。楼主可以继续。

     +++同意~
    自己不发贴共享自己的东西,就喜欢占个位置说三道四,说就说吧,还不注意自己的用词,老想体现自己有多厉害,老想从别人那得到什么,自己却从不共享,你再厉害,不把自己的东西共享出来,那也是浪费表情,我同事里就有这种人,一般出去喝酒都没人会主动叫他,他还总以为自己有多厉害,这种人心理估计有问题!即使心理没问题,也是比较自我的人,这样的人,最好当他不存在,楼主应该继续,不用回复那些!鼓励++! --------------------编程问答-------------------- --------------------编程问答--------------------
引用 64 楼 falizixun2 的回复:
引用 30 楼 aofengdaxia 的回复:

讲课总是要由浅入深的,楼主讲解的很好,循循善诱的有传统的Winform引入到WPF。然后让人理解WPF比Winform的优势是什么,然后说模式,很好的。某些人应该有心理疾病,喜欢钻牛角。楼主可以继续。

     +++同意~
    自己不发贴共享自己的东西,就喜欢占个位置说三道四,说就说吧,还不注意自己的用词,老想体现自己有多厉害……


谢谢你的支持,目前在继续中,新贴在这里:http://topic.csdn.net/u/20110501/21/248a3476-4610-4205-8ef2-9583e4d7be2a.html --------------------编程问答-------------------- 楼主讲的好啊! --------------------编程问答-------------------- --------------------编程问答-------------------- 我做过一个WPF项目,我的软件所有组件加起来只有5M,但要装framework,却要40多M,你说这样的东西在中国能推广出去吗 --------------------编程问答--------------------
引用 69 楼 blackeye2004 的回复:
我做过一个WPF项目,我的软件所有组件加起来只有5M,但要装framework,却要40多M,你说这样的东西在中国能推广出去吗


Don't know about China. I worked on many WPF projects already and some of them were easy to sell but some were not. It depends. --------------------编程问答-------------------- --------------------编程问答-------------------- 好帖,支持啊 --------------------编程问答-------------------- lz一段一段的码那么多文字,真挺不容易的,希望像lz这样的人越多越好。 --------------------编程问答-------------------- 支持,我会一直跟帖 --------------------编程问答-------------------- 实话说,什么 WPF,只怕是打广告的多。

对于一个大系统,比如ERP系统,
是不可能天天换平台的,
而且很多技术都是昙花一现,立即就消失了,
只有那些闲着没事干的才天天追潮流。

csdn几个版主那么推崇新技术,只怕也在给XX打广告吧,呵呵。 --------------------编程问答-------------------- 要说牛B吧,谁用 WPF 做出整个 ERP 系统,才是牛。
要不,没什么可吹的。 --------------------编程问答--------------------
引用 70 楼 ktei2008 的回复:
引用 69 楼 blackeye2004 的回复:

我做过一个WPF项目,我的软件所有组件加起来只有5M,但要装framework,却要40多M,你说这样的东西在中国能推广出去吗


Don't know about China. I worked on many WPF projects already and some of them were easy to sell but s……

ni zai zhuang bi, ni shi da sha bi, oh my ladygaga. --------------------编程问答--------------------
引用 76 楼 weizisheng131083 的回复:
要说牛B吧,谁用 WPF 做出整个 ERP 系统,才是牛。
要不,没什么可吹的。

赞成,这里只有你是我们祖国软件振兴的实干家。只有你是我们祖国最顶尖的IT精英。lz是绣花枕头过家家,玩着泥巴没裤衩。等于伪科学家其实没文化。你才是真正的博士科学家,人民的软件思想家,请允许我崇拜您。 --------------------编程问答--------------------
引用 78 楼 sihonglaoren 的回复:
引用 76 楼 weizisheng131083 的回复:
要说牛B吧,谁用 WPF 做出整个 ERP 系统,才是牛。
要不,没什么可吹的。

赞成,这里只有你是我们祖国软件振兴的实干家。只有你是我们祖国最顶尖的IT精英。lz是绣花枕头过家家,玩着泥巴没裤衩。等于伪科学家其实没文化。你才是真正的博士科学家,人民的软件思想家,请允许我崇拜您。

How much do you earn every week? --------------------编程问答--------------------
引用 76 楼 weizisheng131083 的回复:
要说牛B吧,谁用 WPF 做出整个 ERP 系统,才是牛。
要不,没什么可吹的。

How much do you earn every week? --------------------编程问答--------------------
引用 75 楼 weizisheng131083 的回复:
实话说,什么 WPF,只怕是打广告的多。

对于一个大系统,比如ERP系统,
是不可能天天换平台的,
而且很多技术都是昙花一现,立即就消失了,
只有那些闲着没事干的才天天追潮流。

csdn几个版主那么推崇新技术,只怕也在给XX打广告吧,呵呵。


WPF是不是昙花一现,咱们可以立贴为证,至于有些人说framework太大了,那是因为你用的xp/2003,微软以后的系统包括WIN7都将最新的framework整合到系统中,我想你不至于一辈子都用xp吧,就像当年2000被xp取代一样,有些事实是我们不得不面对的。至于说用WPF做ERP,首先说自定义界面开发,WPF绝对比winform高效,至于逻辑方面,好的设计可以使得WPF和winform公用大部分逻辑功能,就像同时使用winfom和asp.net开发一样,这方面wpf跟winform没什么区别;WPF相对winform的劣势可能就是学习成本高,这也是很多人望而却步的原因。为什么很少人用WPF做ERP,因为现有的ERP系统已相对成熟,很少有人再花大价钱重整。

就像我前面所说的,CSDN不少人对新事物是有抵触心理的,WPF/SL前景如何,我们可以参考国外的现状,看看国外最大的问答网stackoverflow,其中asp.net:winfrom:wpf接近2:1:1,作为一门较新的技术,这样还不能说明问题吗,再看看我们的CSDN吧 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答--------------------
引用 81 楼 duanzilin 的回复:
引用 75 楼 weizisheng131083 的回复:
实话说,什么 WPF,只怕是打广告的多。

对于一个大系统,比如ERP系统,
是不可能天天换平台的,
而且很多技术都是昙花一现,立即就消失了,
只有那些闲着没事干的才天天追潮流。

csdn几个版主那么推崇新技术,只怕也在给XX打广告吧,呵呵。


WPF是不是昙花一现,咱们可以立贴为证,至于有些人说framewo……

WIN7只集成了3.5,4.0还没集成进去呢,但4.0远远比3.5好 --------------------编程问答-------------------- --------------------编程问答-------------------- 刚开始学,一切用着都不习惯 --------------------编程问答-------------------- 我是菜鸟,lz的太复杂了,我看不懂,
我还是一边闪,不妨碍大家了。 --------------------编程问答--------------------
引用 88 楼 weizisheng131083 的回复:
我是菜鸟,lz的太复杂了,我看不懂,
我还是一边闪,不妨碍大家了。

你那能是菜鸟,你是真的猛士,敢于直面sb楼主。我想你一定是每小时工资 > 1000 美金的顶级专家,去干掉楼主! --------------------编程问答--------------------
引用 79 楼 ktei2008 的回复:
引用 78 楼 sihonglaoren 的回复:

引用 76 楼 weizisheng131083 的回复:
要说牛B吧,谁用 WPF 做出整个 ERP 系统,才是牛。
要不,没什么可吹的。

赞成,这里只有你是我们祖国软件振兴的实干家。只有你是我们祖国最顶尖的IT精英。lz是绣花枕头过家家,玩着泥巴没裤衩。等于伪科学家其实没文化。你才是真正的博士科学家,人民的软件思想家,请允许我……

你有weizisheng131083赚的多么?你如果在美国,我估计也就是一个每小时8刀在拿基本工资的主。如果我是雇主,我真的不愿意pay你8.01刀。 --------------------编程问答-------------------- 楼主这些花哨玩意,最多也就是做一个Visual Studio这种机巧小玩具。
你知道weizisheng131083这样的顶级架构师在做什么么?他一手创建了SAP的帝国!看看人家多谦虚。搞出了世界一流的企业资源计划软件,而且还是中国特色世界领先,不屑于和你这种菜鸟对话。 --------------------编程问答-------------------- 嗯,大家一起好好学习 --------------------编程问答--------------------
引用 90 楼 sihonglaoren 的回复:
引用 79 楼 ktei2008 的回复:
引用 78 楼 sihonglaoren 的回复:

引用 76 楼 weizisheng131083 的回复:
要说牛B吧,谁用 WPF 做出整个 ERP 系统,才是牛。
要不,没什么可吹的。

赞成,这里只有你是我们祖国软件振兴的实干家。只有你是我们祖国最顶尖的IT精英。lz是绣花枕头过家家,玩着泥巴没裤衩。等于伪科学家其实没文化。你……


I'm in Africa. So I cannot earn any dollar. So sad.
And, I didn't show any tricks or good techniques in this thread. This thread just talks some very basic stuff...

As to weizisheng131083, I don't know about him, sorry. And you dont know about me, do you? You just assume everything you said about me, so I forgive you. --------------------编程问答--------------------
引用 88 楼 weizisheng131083 的回复:
我是菜鸟,lz的太复杂了,我看不懂,
我还是一边闪,不妨碍大家了。


I'm just wondering that: what troubles did I bring to you based on the fact that I created this damn thread? Why did you come here at very beginning, provided that you've already an IT elite. You guys are just so funny.

If this thread makes you uncomfortable, just don't go in and go to some other places... Should I even ask for your permission before I say anything about programming? --------------------编程问答--------------------
引用 91 楼 sihonglaoren 的回复:
楼主这些花哨玩意,最多也就是做一个Visual Studio这种机巧小玩具。
你知道weizisheng131083这样的顶级架构师在做什么么?他一手创建了SAP的帝国!看看人家多谦虚。搞出了世界一流的企业资源计划软件,而且还是中国特色世界领先,不屑于和你这种菜鸟对话。


My ability is far less enough to build a Visual Studio... You just respect me too much kid.

Also, the words below apply to you as well...
你知道weizisheng131083这样的顶级架构师在做什么么?他一手创建了SAP的帝国!看看人家多谦虚。搞出了世界一流的企业资源计划软件,而且还是中国特色世界领先,不屑于和你这种菜鸟对话。 --------------------编程问答-------------------- --------------------编程问答-------------------- 受教了真的是··呵呵 --------------------编程问答-------------------- 论坛就是用来学习的、我想lz开贴只是想跟大家分享技术,共同进步  难倒lz的精神不值得我们认可嘛? 不管有其它兄弟是觉得lz讲的东西不认同还是什么,其实可以说出来大家一起探讨 学习, 没有必要争个谁对谁错 来个人身攻击什么的、 大家在这里只是为学习 找到志同道合的朋友 不是嘛 --------------------编程问答-------------------- 同意#98楼的,始终保持一颗学习的精神 --------------------编程问答-------------------- 有些人真2  
顶LZ分享精神!
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,