我正在開發一個涉及圖表控件的Silverlight項目。如何使用MVVM綁定Silverlight中的自定義事件模式不使用Blend?
我在其系列上使用圖表控件&我實現了左鍵上下文菜單,它有兩個MenuItems, 「展開」&「鑽取」。
public class WebChart : Chart
{
ContextMenu ChartItemDataMenu;
public WebChart()
: base()
{
this.Loaded += new RoutedEventHandler(WebChart_Loaded);
}
private void WebChart_Loaded(object sender, RoutedEventArgs e)
{
MenuItem expand = new MenuItem();
expand.Click += new RoutedEventHandler(OnExpand_Click);
ToolTipService.SetToolTip(expand, "Expand");
MenuItem drill = new MenuItem();
drill.Click += new RoutedEventHandler(OnDrill_Click);
ToolTipService.SetToolTip(drill, "Drill");
ChartItemDataMenu = new ContextMenu();
ChartItemDataMenu.Items.Add(expand);
ChartItemDataMenu.Items.Add(drill);
this.DataItemMouseLeftButtonDown +=
new EventHandler<DataItemMouseEventArgs>(ExtendedXamWebChart_DataItemMouseLeftButtonDown);
this.MouseRightButtonDown -= (s, eventArgs) => { eventArgs.Handled = true; };
this.MouseRightButtonDown += (s, eventArgs) => { eventArgs.Handled = true; };
}
private void ExtendedXamWebChart_DataItemMouseLeftButtonDown(object sender, DataItemMouseEventArgs e)
{
ChartItemDataMenu.IsOpen = true;
}
對於這兩個菜單項我已經宣佈獨立的點擊事件,註冊他們養他們。 然後我將XAML中的這些事件綁定到視圖模型中的ICommand屬性。
public delegate void WebChartEventHandler(object sender, DataItemMouseEventArgs e, DataPoint dp, qcPoint qp);
public event WebChartEventHandler ExpandClickEvent;
public event WebChartEventHandler DrillClickEvent;
private void OnDrill_Click(object sender, RoutedEventArgs e)
{
if (currentDataItemMouseEventArgs == null)
currentDataItemMouseEventArgs = new DataItemMouseEventArgs();
if (DrillClickEvent != null)
{ DrillClickEvent(sender, currentDataItemMouseEventArgs, SelectedDataPoint, CurrentSelectedPoint); }
}
private void OnExpand_Click(object sender, RoutedEventArgs e)
{
if (currentDataItemMouseEventArgs == null)
currentDataItemMouseEventArgs = new DataItemMouseEventArgs();
if (ExpandClickEvent != null)
{ ExpandClickEvent(sender, currentDataItemMouseEventArgs, SelectedDataPoint, CurrentSelectedPoint); }
}
}
但在調試代碼,我得到「ExpandClickEvent」 &「DrillClickEvent」爲空,因爲沒有人聽吧。
我在另一個名爲ChartBaseControl的用戶控件中使用此WebChart控件,而該控件又在名爲圖形控件的另一個用戶控件中使用。 DataContext已正確設置。 我創建了一個名爲ViewModelGraphControl的ViewModel。
我相信有一些我失蹤了。 請照顧問題。
編輯的內容:XAML:
<extnchart:WebChart Grid.Row="0" x:Name="CTRLWebChart" VerticalAlignment="Stretch"
Margin="0,-23,0,0" IsDrillEnable="True"
local:AxisTitleSettings.XAxisTitle="X-Axis"
local:AxisTitleSettings.YAxisTitle="Y-Axis"
ChartSeriesCollection="{Binding WebChartSource, Mode=TwoWay}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="DrillClickEvent">
<command:EventToCommand Command="{Binding OnDrill_Click}" PassEventArgsToCommand="True"/>
</i:EventTrigger>
<i:EventTrigger EventName="ExpandClickEvent">
<command:EventToCommand Command="{Binding OnExpand_Click}" PassEventArgsToCommand="True"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<extnchart:ExtendedXamWebChart.Axes>
<igWebChart:Axis AxisType="PrimaryX">
<igWebChart:Axis.Label>
<igWebChart:LabelGroup DistanceFromAxis="2"/>
</igWebChart:Axis.Label>
</igWebChart:Axis>
<igWebChart:Axis AxisType="PrimaryY">
<igWebChart:Axis.Label>
<igWebChart:LabelGroup FontSize="11"/>
</igWebChart:Axis.Label>
</igWebChart:Axis>
</extnchart:ExtendedXamWebChart.Axes>
</extnchart:ExtendedXamWebChart>
有在你的代碼有些古怪的地方,但沒有什麼跳出作爲無效事件的原因。你是否也可以提供應該監聽事件的控件的Xaml? –