データグリッドの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ステートメント?
はい、私は、一般的なイベントの芸術とAddingNewItemのための特定のものの両方を試してみました。どちらもうまくいかなかった。 – blueshift
これを嘲笑して、欠けているものがあるかどうかを確認します。新しい行を追加するために「開始」するとすぐに消えます。さて、このデータグリッドは他のコントロール(ネストされた)に埋め込まれていますか? DataGridにdatacontextがない可能性はありますか? CMのデバッグを有効にしていますか? 'LogManager.GetLog = type => new DebugLog(type);'ブートストラップのコンストラクタに 'Initialize();'の前に入れてください。 VSからデバッグモードでプロジェクトを実行すると、コンソール出力にはCMデバッグ情報が含まれます。 – mvermef
ここに解決策があります。 Caliburn.Microのドキュメントに記載されている完全なInteraction.Trigger構文を使用しなければなりませんでした。これには、$ eventArgs特殊値のcal:Parameterステートメントの使用が含まれます。アプリケーションを実行すると、新しい行を作成する前にAddSampleWithTypeメソッドが呼び出されました。奇妙なことに、このテストの後、私は短縮形のMessage.Attach構文に戻り、AddSampleWithTypeメソッドが呼び出されました。それは、 "ポンプを準備する"ためには完全な構文が必要だったように振る舞いました。ありがとう、mvermef、あなたの助けになりました。 – blueshift