2016-09-25 18 views
0

データグリッドのAddingNewItemイベントが発生したときに、私のビューモデルでAddSampleWithTypeメソッドを呼び出すために、Caliburn.Microのメッセージアクション構文を使用しています。ユーザーは、データグリッドでEnterキーを押すとデータグリッドは、私はSampleTypeが渡されている必要がありSampleクラスのコンストラクタを使用して、私のSamples BindableCollectionに新しいアイテムを作成したい、新しい行を作成し始めると。ここでDatagrid.AddingNewItemビューモデルでアクションを実行していません

私のビューのデータグリッドXAMLです:

<DataGrid Name="Samples" SelectedIndex="{Binding SamplesIndex}" Margin="5" Grid.Row="3" 
       BorderBrush="White" BorderThickness="1" AutoGenerateColumns="False" 
        cal:Message.Attach="[Event AddingNewItem] = [Action AddSampleWithType($eventArgs)]"> 
      <DataGrid.Columns> 
       <DataGridTextColumn Header="Sample Names" Binding="{Binding Name}" Width="*" > 
        <DataGridTextColumn.HeaderStyle> 
         <Style TargetType="DataGridColumnHeader" BasedOn="{StaticResource MetroDataGridColumnHeader}" > 
          <Setter Property="HorizontalContentAlignment" Value="Center" /> 
         </Style> 
        </DataGridTextColumn.HeaderStyle> 
       </DataGridTextColumn> 
      </DataGrid.Columns> 
     </DataGrid> 

とビューモデルで重要なコード:

public void AddSampleWithType(EventArgs e) 
{ 
    AddingNewItemEventArgs newItemEventArg = (AddingNewItemEventArgs)e; 
    newItemEventArg.NewItem = new Sample(selectedSampleType, "New Sample", SessionSettings.Instance.UserID); 
} 

私はの最初のステートメントにブレークポイントを置きます210の方法ですが、プログラムは決してそこに行きません。このメソッドは決して呼び出されません。

私のcalには何か問題がありますか?わからないMessage.Attachステートメント?

答えて

0

メソッドのパラメータとしてAddingNewItemEventArgsを入れてみましたか?メソッドシグネチャがイベントシグネチャに一致する必要があるため、EventArgsを単に渡すだけでは不十分です。CMは、特に$ eventArgs specialを使用していることを理解しています。

私がイベントを追加したとき、私はその署名を心には知らなかった。デザイナーを使ってコードビハインドを追加し、問題のビューモデルメソッドに必要な部分をコピーして貼り付けた。

https://msdn.microsoft.com/en-us/library/system.windows.controls.datagrid.addingnewitem(v=vs.110).aspx

+0

はい、私は、一般的なイベントの芸術とAddingNewItemのための特定のものの両方を試してみました。どちらもうまくいかなかった。 – blueshift

+0

これを嘲笑して、欠けているものがあるかどうかを確認します。新しい行を追加するために「開始」するとすぐに消えます。さて、このデータグリッドは他のコントロール(ネストされた)に埋め込まれていますか? DataGridにdatacontextがない可能性はありますか? CMのデバッグを有効にしていますか? 'LogManager.GetLog = type => new DebugLog(type);'ブートストラップのコンストラクタに 'Initialize();'の前に入れてください。 VSからデバッグモードでプロジェクトを実行すると、コンソール出力にはCMデバッグ情報が含まれます。 – mvermef

+0

ここに解決策があります。 Caliburn.Microのドキュメントに記載されている完全なInteraction.Trigger構文を使用しなければなりませんでした。これには、$ eventArgs特殊値のcal:Parameterステートメントの使用が含まれます。アプリケーションを実行すると、新しい行を作成する前にAddSampleWithTypeメソッドが呼び出されました。奇妙なことに、このテストの後、私は短縮形のMessage.Attach構文に戻り、AddSampleWithTypeメソッドが呼び出されました。それは、 "ポンプを準備する"ためには完全な構文が必要だったように振る舞いました。ありがとう、mvermef、あなたの助けになりました。 – blueshift

関連する問題