返回首页

大家好,

我2个月左右,新的C#和WPF。我试图解决下列情况下,我需要完成。任何帮助将不胜感激。

场景是什么,我需要实现如下:

1)如果我有一个单一数据模型有一个或多个属性的对象,我需要时,他们改变显示属性 - 我有没有问题,因为我绑定的属性使用INotifyPropertyChanged的

2)如果我有一个综合数据模型,它是由两个或更多的单一数据模型对象。如果有3个属性的单一数据模型,如姓名,分数,等级,然后有综合数据模型中的3相同的属性。然而,在综合数据模型的属性值中的任何单一数据模型
依赖这些值的变化
这两种模式实现INotifyPropertyChanged和IBaseModel(在我的源代码中看到下面的名单)

例如,如果:

SDM1(单一数据模型):[名称=人,分数= 50,排名= 5]
SDM2(单数据模型):[名称=女人,分数,等级= 70 = 8]

为清洁发展机制(综合数据模型)应该是以下几点:

清洁发展机制:[名称=男子/女子,分数=(70 50)/ 2,等级=(8-5)

3)在我的数据网格,我应该看到:

男子50 5
女子70 8
男子/女子60 3

4)现在,如果明天,为SDM1(MAN)的分数应该改变至30日,我的清洁发展机制应重新计算得分(70 30/2)的值,并更新数据网格显示:

男子/女子50 3

5)如果再次,SDM2(女)的排名变化到10,我的清洁发展机制应改变(10-5)

男子/女子50 5

我已经拥有的主要问题是以下几点:
一个。我怎么能创造任何SMD的,这样的依赖,如果在它的任何财产的变化,它应该引发AA在CMD这些特定的属性,重新计算并更改数据网格中的属性值。

我知道我可以使用观察者模式,并注册CMD作为观察员和为主题的SDM的属性和在CMD属性观察主体的特定属性。(SDM1和SMD2〜)

然而,我所看到的是,简单地分配在以下的分数CDM集方法的价值是不够的触发任何这种变化的WPF

// WPF Data Grid - Binding SPREAD

private double _score;

public double Score

{

    get

    {

        Debug.WriteLine(this.ToString() + ": Score - (GET) - [_score=" + _score+ "]");

        return _score;

    }

    set

    {

        Debug.WriteLine(this.ToString() + ": Score - (SET) - [value=" + value + "]");

        this._score= (sdm1.Score - sdm2.Score)/2;

        OnPropertyChanged("Score");

    }

}

我有一个简单的数据网格如下:

{C}
在我MainView.xaml.cs,我有以下几点:


using System;

using System.Collections.Generic;

using System.Collections;

using System.Linq;

using System.Text;

using System.Windows;

using System.Windows.Controls;

using System.ComponentModel;

using System.Windows.Data;

using System.Windows.Documents;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Imaging;

using System.Windows.Navigation;

using System.Windows.Shapes;

using System.Threading;

 

using System.Windows.Markup;

using System.Diagnostics;

 

namespace ValueModelTest

{

    /// <summary>

    /// Interaction logic for MainWindow.xaml

    /// </summary>

    public partial class MainWindow : UserControl

    {

        // MyModel and MyCompositeModel

        public MyDataModel s2Model;

        public MyDataModel s5Model;

        public MyCompositeModel scModel;

 

        // Contains all the Main DataModel - Grid

        private static List<IBaseModel> dataSource;

        // DataModel Structure in the XAML

        private static CollectionViewSource dataViewSource;

 

        // Main

        public MainWindow()

        {

            InitializeComponent();

 

            this.DataContext = this;

 

            // Initialize the Data once the WPF Grid Display is initialized

            InitializeData();

        }

 

        // Load the data into the Grid

        public void InitializeData()

        {

            try

            {

                Debug.WriteLine(this.ToString() + ":InitializeData");

 

                // DataList Initialize

                dataSource = new List<IBaseModel>();

 

                // Create the MyModel(2)

                s2Model = new MyModel();

                s2Model.NAME = "Man";

                s2Model.Score= 50;

                s2Model.Rank= 5;

                dataSource.Add(s2Model);

 

                // Create another MyModel(5)

                s5Model = new MyModel();

                s5Model.NAME = "Woman";

                s5Model.Score= 70;

                s5Model.Rank= 8;

                dataSource.Add(s5Model);

 

                // Create the Composite MyCompositeModel (Man/Woman)

                scModel = new MyCompositeModel (1, s2Model, s5Model);

                scModel.NAME = s2Model.NAME + "/" + s5Model.NAME;

                dataSource.Add(scModel);

 

                // Get a handle on the Data Source in the WPF

                dataViewSource = (CollectionViewSource)FindResource("MyDataSource");

 

                //Populate the WPF Data

                dataViewSource.Source = dataSource;

            }

            catch (Exception ex)

            {

                Debug.WriteLine(this.ToString() + ": InitializeData Error - " + ex.StackTrace.ToString());

            }

 

            Debug.WriteLine("ValueModelTest: - Testing");

        }

    }

}

回答

评论会员:t 时间:2