大家好,
我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");
}
}
}