Я использую RadChart из Telerik в WPF, и у меня есть проблема, когда я хочу указать MaxValue, MinValue и Step для дополнительной оси Y.Невозможно использовать привязки для дополнительной оси Y в Telerik
Он отлично работает, если я жёстко значения, как это (соответствующая часть последних четырех строк):
<Controls:AxisY MinorTicksVisibility="Hidden"
DefaultLabelFormat="#VAL{#,##0}"
Title="{UI:Language @{xCubicMetrePerHourSymbol}}"
MajorGridLinesVisibility="Hidden" StripLinesVisibility="Visible"
AxisName="CubicMetreAxis"
AutoRange="False"
MaxValue="10000"
MinValue="0"
Step="0">
Но так как я хочу, чтобы изменить MinValue, MaxValue и шаг в зависимости от значений в серии, я должен связать его таким образом, используя свойства из объекта ViewModel (который должен быть моим унаследовали DataContext):
<Controls:AxisY MinorTicksVisibility="Hidden"
DefaultLabelFormat="#VAL{#,##0}"
Title="{UI:Language @{xCubicMetrePerHourSymbol}}"
MajorGridLinesVisibility="Hidden" StripLinesVisibility="Visible"
AxisName="CubicMetreAxis"
AutoRange="False"
MaxValue="{Binding Path=MyMaxValue}"
MinValue="{Binding Path=MyMinValue}"
Step="{Binding Path=MyStep}">
Но мне кажется, что DataContext нельзя увидеть/установить с дополнительной Y-оси из того, что я собрал, используя Snoop.
я получаю следующее сообщение об ошибке (такое же сообщение для каждого из привязок):
System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or
FrameworkContentElement for target element. BindingExpression:Path=MyMaxValue;
DataItem=null; target element is 'AxisY' (HashCode=47300984); target property is
'MaxValue' (type 'Double')
Я думал, что сделал ошибку где-то и искал в течение нескольких часов, но я обнаружил, что-то странное: если я используйте эти привязки в «оригинальной» оси Y, все работает отлично. Код для обеих осей точно такой же. Единственное отличие заключается в родительских элементах.
Это работает:
<Controls:ChartArea.AxisY>
<Controls:AxisY MinorTicksVisibility="Hidden"
DefaultLabelFormat="#VAL{#,##0}"
Title="{UI:Language @{GigaJoulePerHourSymbol}}"
MajorGridLinesVisibility="Hidden"
StripLinesVisibility="Visible"
AutoRange="False"
MaxValue="{Binding Path=MyMaxValue}"
MinValue="{Binding Path=MyMinValue}"
Step="{Binding Path=MyStep}">
<Controls:AxisY.AxisStyles>
<Controls:AxisStyles TitleStyle="{StaticResource TranslatedAxisStyle}" />
</Controls:AxisY.AxisStyles>
</Controls:AxisY>
</Controls:ChartArea.AxisY>
Это не:
<Controls:ChartArea.AdditionalYAxes>
<Controls:AxisY MinorTicksVisibility="Hidden"
DefaultLabelFormat="#VAL{#,##0}"
Title="{UI:Language @{xCubicMetrePerHourSymbol}}"
MajorGridLinesVisibility="Hidden"
StripLinesVisibility="Visible"
AxisName="CubicMetrePerHourAxis"
AutoRange="False"
MaxValue="{Binding Path=MyMaxValue}"
MinValue="{Binding Path=MyMinValue}"
Step="{Binding Path=MyStep}">
<Controls:AxisY.AxisStyles>
<Controls:AxisStyles TitleStyle="{StaticResource TranslatedAxisStyle}" />
</Controls:AxisY.AxisStyles>
</Controls:AxisY>
</Controls:ChartArea.AdditionalYAxes>
Сам элемент точно так же, за исключением того, что второй из них имеет имя и название отличается, но я тестируется, и на самом деле это ничего не влияет. Единственное отличие состоит в том, что родительские элементы разные.
Я хотел бы знать, почему AxisY видит DataContext и может правильно связать в то время как AdditionalYAxis не может.
Возможно (я предполагаю), потому что 'AdditionalYAxes' не находится в визуальном дереве. Посмотрите, можете ли вы применить один из стандартных обходных решений, например: http://stackoverflow.com/a/5647426/1001985 – McGarnagle
@McGarnagle Это работает! Большое спасибо, я бы никогда не узнал, как это сделать. Отправьте это как ответ, если вы хотите, чтобы я принял его. –