C# WPF DependentValueBinding How

Címkék
C# WPF DependentValueBinding How
2014-04-06T12:42:17+02:00
2014-04-10T20:53:34+02:00
2022-10-15T23:06:22+02:00
proba18
Sziasztok

A kérdésem a következő lenne. 
Szeretnék egy egyedi chart-controlt csinálni. A nagy része már készen van, viszont van egy nagyobb hibája. 

A WPF ToolKit chart-ja tudja a következőt. (És tudom, hogy még sok más is, de ezt ismerik szerintem többen)

<charting:LineSeries IndependentValueBinding="{Binding Key}" DependentValueBinding="{Binding Value}" />

Na most engem az érdekelne, hogy hogy tudok én ilyen kötéseket csinálni, majd később azokat használni a kódból.

Remélem érthető a kérdés.

Üdv
R
Mutasd a teljes hozzászólást!
googliban gyorsan rákerestem erre a chart-ra
WPF Toolkit Charting Controls (Line, Bar, Area, Pie, Column Series) Demo - CodeProject

Ezt a cikket jobban megnézve az alábbi különbséget láthatod
<chartingToolkit:ColumnSeries DependentValuePath="Value"
IndependentValuePath="Key" ItemsSource="{Binding}" />

<charting:LineSeries 
 ItemsSource="{Binding list}"
IndependentValueBinding="{Binding Time}"
DependentValueBinding="{Binding A}" />

Azaz ami nálad Binding, az az eredeti kódban csak egy string érték (persze ettől még lehet binding, csak akkor az a változó fogja a neked szükséges property nevét tartalmazni)

Csatoltam egy kis kódot
A lényege, hogy egy object collection-ból refelection segítségével szedi ki a property értékét

using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { var propDemo = new PropDemo(); propDemo.Init(); propDemo.Run("XValue", "YValue"); Console.ReadLine(); } } public class PropDemo { ObservableCollection<object> _collection; public PropDemo() { _collection = new ObservableCollection<object>(); } public void Init() { FillCollection(); } private void FillCollection() { for (var i = 0; i < 10; i++) { _collection.Add(new ChartData { XValue = i, YValue = i * 2 }); } } public void Run(string propName1, string propName2) { foreach(var item in _collection) { var value1 = item.GetType().GetProperty(propName1).GetValue(item, null); var value2 = item.GetType().GetProperty(propName2).GetValue(item, null); Console.WriteLine("{0}:{1}", value1, value2); } } } class ChartData { public double XValue { get; set; } public double YValue { get; set; } } }
Mutasd a teljes hozzászólást!

  • custom control
    dependency property

    public static readonly DependencyProperty propertyNameProperty = DependencyProperty.Register("propertyName", typeof (propertyType), typeof (ControlName), new PropertyMetadata(default(propertyType))); public propertyType propertyName { get { return (propertyType) GetValue(propertyNameProperty); } set { SetValue(propertyNameProperty, value); } }
    Mutasd a teljes hozzászólást!
  • Dante köszönöm a választ, de nem egészen erre gondoltam. Ez egy sima Dep Prop. Amivel a gond az, hogy meg kell adnom a típust. És pl egy listából nem tudok hivatkozni rá.
    Mutasd a teljes hozzászólást!
  • És pl egy listából nem tudok hivatkozni rá.

    ezt most hogy érted?
    Mutasd a teljes hozzászólást!
  • Ha van egy itemssource dep property-m.( bármilyen lista lehet (vagy bármi ami IEnumerable)) akkor azt szeretném, hogy a xaml kódban meg tudjam adni, hogy a lista tipusának melyik property-jére hivatkozzon a kód, amikor felrajzolom a chart-ot.

    pl.

    class myType{ public int A{get;set;} public int B{get;set;} public int C{get;set;} public DateTime Time{get;set;} } List<myType> list = ....


    akkor a xaml a következő

    <charting:LineSeries ItemsSource="{Binding list}" IndependentValueBinding="{Binding Time}" DependentValueBinding="{Binding A}" />


    Tehát a chart pontjai bármilyen tipusuak lehessenek, és ne kelljen ehhez egy külön típust definiálnom. Viszont tudjam, hogy a pontokat az A és a Time property-kből kell előállítani a diagramon.


    Az a baj, hogy nem tudom rendesen leírni, mert ha pontosan tudnám, hogy ez hogy néz ki, akkor le is tudnám írni és meg is tudnám csinálni.

    Ha még így sem lett egy kicsit világosabb akkor próbálom valahogy máshogy körbe írni a problémát.
    Mutasd a teljes hozzászólást!
  • googliban gyorsan rákerestem erre a chart-ra
    WPF Toolkit Charting Controls (Line, Bar, Area, Pie, Column Series) Demo - CodeProject

    Ezt a cikket jobban megnézve az alábbi különbséget láthatod
    <chartingToolkit:ColumnSeries DependentValuePath="Value"
    IndependentValuePath="Key" ItemsSource="{Binding}" />

    <charting:LineSeries 
     ItemsSource="{Binding list}"
    IndependentValueBinding="{Binding Time}"
    DependentValueBinding="{Binding A}" />

    Azaz ami nálad Binding, az az eredeti kódban csak egy string érték (persze ettől még lehet binding, csak akkor az a változó fogja a neked szükséges property nevét tartalmazni)

    Csatoltam egy kis kódot
    A lényege, hogy egy object collection-ból refelection segítségével szedi ki a property értékét

    using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { var propDemo = new PropDemo(); propDemo.Init(); propDemo.Run("XValue", "YValue"); Console.ReadLine(); } } public class PropDemo { ObservableCollection<object> _collection; public PropDemo() { _collection = new ObservableCollection<object>(); } public void Init() { FillCollection(); } private void FillCollection() { for (var i = 0; i < 10; i++) { _collection.Add(new ChartData { XValue = i, YValue = i * 2 }); } } public void Run(string propName1, string propName2) { foreach(var item in _collection) { var value1 = item.GetType().GetProperty(propName1).GetValue(item, null); var value2 = item.GetType().GetProperty(propName2).GetValue(item, null); Console.WriteLine("{0}:{1}", value1, value2); } } } class ChartData { public double XValue { get; set; } public double YValue { get; set; } } }
    Mutasd a teljes hozzászólást!
  • Köszönöm . Tökéletes.
    Mutasd a teljes hozzászólást!
Címkék
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd