Ho utilizzato il controllo grafico di Microsoft del toolkit WPF per scrivere il mio controllo grafico. Ho bloggato su di esso here. Il mio controllo grafico impila gli yax nel grafico uno sopra l'altro. Come puoi leggere nell'articolo, tutto funziona abbastanza bene. Ora voglio creare un viewmodel che controlli i dati e gli assi nel grafico. Finora sono in grado di aggiungere assi al grafico e mostrarli nel grafico. Ma ho un problema quando provo ad aggiungere le linee di produzione perché ha una proprietà DependentAxis e una proprietà InDependentAxis. Non so come assegnare i controlli xAxis e yAxis appropriati ad esso.
Di seguito viene visualizzata una parte di LineSeriesViewModel. Ha una proprietà nidificata XAxisViewModel e YAxisViewModel.Come associare i modelli di visualizzazione nidificati alle proprietà di un controllo
public class LineSeriesViewModel : ViewModelBase, IChartComponent
{
XAxisViewModel _xAxis;
public XAxisViewModel XAxis
{
get { return _xAxis; }
set
{
_xAxis = value;
RaisePropertyChanged(() => XAxis);
}
}
//The YAxis Property look the same
}
Tutti i modelli di visualizzazione hanno il proprio datatemplate. Il codice XAML è simile al seguente:
<UserControl.Resources>
<DataTemplate x:Key="xAxisTemplate" DataType="{x:Type l:YAxisViewModel}">
<chart:LinearAxis x:Name="yAxis" Orientation="Y" Location="Left" Minimum="0" Maximum="10" IsHitTestVisible="False" Width="50" />
</DataTemplate>
<DataTemplate x:Key="yAxisTemplate" DataType="{x:Type l:XAxisViewModel}">
<chart:LinearAxis x:Name="xAxis" Orientation="X" Location="Bottom" Minimum="0" Maximum="100" IsHitTestVisible="False" Height="50" />
</DataTemplate>
<DataTemplate DataType="{x:Type l:LineSeriesViewModel}">
<!--Binding doesn't work on the Dependent and IndependentAxis! -->
<!--YAxis XAxis and Series are properties of the LineSeriesViewModel -->
<l:FastLineSeries DependentAxis="{Binding Path=YAxis}"
IndependentAxis="{Binding Path=XAxis}"
ItemsSource="{Binding Path=Series}"/>
</DataTemplate>
<Style TargetType="ItemsControl">
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<!--My stacked chart control -->
<l:StackedPanel x:Name="stackedPanel" Width="Auto" Height="Auto" Background="LightBlue">
</l:StackedPanel>
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ClipToBounds="True">
<!-- View is an ObservableCollection of all axes and series-->
<ItemsControl x:Name="chartItems" ItemsSource="{Binding Path=View}" Focusable="False">
</ItemsControl>
</Grid>
Questo codice funziona abbastanza bene. Quando aggiungo gli assi vengono disegnati. Ma il DependentAxis e l'InDependentAxis del controllo delle linee restano nulli, quindi la serie non viene disegnata. Come posso associare i modelmodelli nidificati alle proprietà di un controllo?