2014-03-07 39 views
0

我在選擇dsl的隔間形狀時遇到問題。我想要做的是:房間形狀屬性的選擇

我有一個隔間,有一個隔間有很多屬性的DSL隔間。每個屬性都有一個用於保存c#代碼的文本字段。我編譯這段代碼並將錯誤任務添加到錯誤列表中。我爲錯誤任務的導航事件添加了一個事件處理程序。在這個處理程序中,我想選擇導致錯誤的隔間形狀的屬性。我嘗試了很多東西,但沒有成功。這是我目前的選擇邏輯:

public void Select(Rule rule) 
{ 
    Library.Field ruleField = rule.Field as Library.Field; 
    var ruleFieldPresentation = PresentationViewsSubject.GetPresentation(ruleField as ModelElement).FirstOrDefault() as ShapeElement; 

    VSDiagramView activeDiagramView = Diagram.ActiveDiagramView as VSDiagramView; 
    if (activeDiagramView != null) 
    { 
    var docView = activeDiagramView.DocView; 
    activeDiagramView.Selection.Clear(); 
    docView.CurrentDiagram.ActiveDiagramView.Selection.Set(new DiagramItem(ruleFieldPresentation)); 
    } 
} 

問題似乎compartmentshape的財產不具有presentationview,因爲我沒有能夠得到它。

如果有人能幫助我解決這個問題,我會很高興也很感激。

謝謝 問候曼努埃爾

回答

0

我想從錯誤列表中打開一個錯誤。在錯誤上使用導航事件有更好的解決方案。更好的解決方案是將驗證規則添加到域類,並將錯誤與上下文添加到錯誤列表中。比開箱即用的導航。

context.LogError(errorDescription, "GAIN001RuleCompilationError", Field);