2012-02-27 2 views
0

Надеюсь, что кто-то может помочь с некоторой неприятной проблемой.Проблема с привязкой Silverlight - не привязана к POCO - Visifire

У меня есть график (visifire), но просто посмотрите на него как стандартный элемент управления привязкой silverlight.

При попытке привязки непосредственно к моему объекту POCO, который содержит список объектов (custom), который наследуется от INotifyPropertyChanged, тогда абсолютно ничего не происходит!

При этом мой словарь Вступление Класс

class GraphValue : INotifyPropertyChanged 
    { 

    public event PropertyChangedEventHandler PropertyChanged; 

    private string name; 
    public string IndicatorName 
    { 
     get 
     { 
      return name;     
     } 

     set 
     { 
      name = value; 
      onPropertyChanged(this, "IndicatorName"); 
     } 
    } 
    private double _value; 
    public double IndicatorValue 
    { 
     get 
     { 
      return _value; 
     } 
     set 
     { 
      _value = value; 
      onPropertyChanged(this, "IndicatorValue"); 
     } 
    } 

    private void onPropertyChanged(object sender, string propertyName) 
    { 
     if (this.PropertyChanged != null) 
     { 
      PropertyChanged(sender, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 

Я затем создать список и она помещается внутри POCO класса называется ClosedSameDayList. Данные заполнены штрафом, я проверил.

Когда в конечном итоге устанавливается тип данных, ничего не происходит!

MyGraph.DataContext = ClosedSameDayList.GraphValues.OrderBy(z => z.IndicatorName); 

Однако, вот кикер.

При выполнении следующего, все работает:

ObservableCollection<KeyValuePair<string, double>> g = new ObservableCollection<KeyValuePair<string, double>>(); 

foreach (var item in ClosedSameDayList.GraphValues) 
{ 
    g.Add(new KeyValuePair<string, double>(item.IndicatorName, item.IndicatorValue)); 
}  
MyGraph.DataContext = g.OrderBy(z => z.Key); 

настоящий XAML для диаграммы:

  <vc:Chart xmlns:vc="clr-namespace:Visifire.Charts;assembly=SLVisifire.Charts" DataContext="{Binding}" Name="MyGraph" Height="240" BorderThickness="0" Theme="Theme2" View3D="True" ToolBarEnabled="True" > 
       <vc:Chart.Titles> 
        <vc:Title Text="My Title" /> 
       </vc:Chart.Titles> 
       <vc:Chart.AxesX> 
        <vc:Axis Title="My Title" /> 
       </vc:Chart.AxesX> 
       <vc:Chart.AxesY> 
        <vc:Axis Title="My Title" AxisType="Primary" /> 
       </vc:Chart.AxesY> 
       <vc:Chart.Series> 
        <vc:DataSeries RenderAs="Column" DataSource="{Binding}"> 
         <vc:DataSeries.DataMappings> 
          <vc:DataMapping MemberName="AxisXLabel" Path="IndicatorName"></vc:DataMapping> 
          <vc:DataMapping MemberName="YValue" Path="IndicatorValue"></vc:DataMapping> 
         </vc:DataSeries.DataMappings> 
        </vc:DataSeries> 
       </vc:Chart.Series> 
      </vc:Chart> 

Настоящего Кодекса ClosedSameDay

class ClosedSameDay 
    { 
     public CamlQuery CamlQuery { get; set; } 
     public List List { get; set; } 
     public ListItemCollection Listitems { get; set; } 
     public List<GraphValue> GraphValues { get; set; } 

     public ClosedSameDay() 
     { 
      GraphValues = new List<GraphValue>(); 
      CamlQuery = new CamlQuery(); 
      CamlQuery.ViewXml = "<View>" + 
      " <Method Name='ITServicedesk_Dashboard_ClosedSameday_Individuals_Readlist'/>" + 
      " <Query>" + 
      "  <OrderBy>" + 
      "   <FieldRef Name='id'/>" + 
      "  </OrderBy>" + 
      "  </Query>" + 
      "  <ViewFields>" + 
      "   <FieldRef Name='id'/>" + 
      "   <FieldRef Name='Name'/>" + 
      "   <FieldRef Name='Total'/>" + 
      "  </ViewFields>" + 
      "</View>"; 
     } 
     public void PopulateObjectData() 
     { 
      foreach (ListItem item in Listitems) 
      { 
       double value = -1; 
       double.TryParse(item["Total"].ToString(), out value); 

       if (item["Name"] != null && !string.IsNullOrEmpty(item["Name"].ToString()) && value != -1) 
       { 
        this.GraphValues.Add(new GraphValue 
        { 
         IndicatorName = item["Name"].ToString(), 
         IndicatorValue = value 
        }); 
       } 
      } 
     } 
     public DataSeries BuildDataSeries() 
     { 

      ObservableCollection<KeyValuePair<string, double>> g = new ObservableCollection<KeyValuePair<string, double>>(); 
      foreach (var item in this.GraphValues) 
      { 
       g.Add(new KeyValuePair<string, double>(item.IndicatorName, item.IndicatorValue)); 
      } 
      Visifire.Charts.DataSeries ds = new Visifire.Charts.DataSeries(); 
      ds.RenderAs = Visifire.Charts.RenderAs.Column; 
      ds.DataSource = g.OrderBy(i => i.Key); 

      Visifire.Charts.DataMapping dm = new Visifire.Charts.DataMapping(); 
      dm.MemberName = "AxisXLabel"; 
      dm.Path = "Key"; 
      ds.DataMappings.Add(dm); 

      Visifire.Charts.DataMapping dm2 = new Visifire.Charts.DataMapping(); 
      dm2.MemberName = "YValue"; 
      dm2.Path = "Value"; 
      ds.DataMappings.Add(dm2); 

      return ds; 
     } 
    } 
+0

Можете ли вы поделиться XAML, чтобы было легко понять настройки привязки? – Vivek

+0

Спасибо за обмен XAML. Я попытался создать то же самое с классом POCO, используя последнюю версию Visifire. Здесь хорошо работает. Какую версию Visifire вы используете? Можете ли вы поделиться своим кодом для ClosedSameDayList? – Somnath

+0

Привет. Я использую Visifire 4.0.0.0. Я обновил вопрос с помощью кода для класса ClosedSameDayList, который является экземпляром класса ClosedSameDay. – Fox

ответ

0

Im закрытие этого вопроса. Используя метод ручной привязки данных ниже, создав DataSeries, все работало нормально

public DataSeries BuildDataSeries() 
{ 

    ObservableCollection<KeyValuePair<string, double>> g = new ObservableCollection<KeyValuePair<string, double>>(); 
    foreach (var item in this.GraphValues) 
    { 
     g.Add(new KeyValuePair<string, double>(item.IndicatorName, item.IndicatorValue)); 
    } 
    Visifire.Charts.DataSeries ds = new Visifire.Charts.DataSeries(); 
    ds.RenderAs = Visifire.Charts.RenderAs.Column; 
    ds.DataSource = g.OrderBy(i => i.Key); 

    Visifire.Charts.DataMapping dm = new Visifire.Charts.DataMapping(); 
    dm.MemberName = "AxisXLabel"; 
    dm.Path = "Key"; 
    ds.DataMappings.Add(dm); 

    Visifire.Charts.DataMapping dm2 = new Visifire.Charts.DataMapping(); 
    dm2.MemberName = "YValue"; 
    dm2.Path = "Value"; 
    ds.DataMappings.Add(dm2); 

    return ds; 
} 
0

Try формы Приложеиних "Quick Start With DataBinding" образца Visifire Example Area.

+0

У меня есть и по какой-то причине он не работает. Только при работе с объектом POCO он не привязывается к данным. – Fox

Смежные вопросы