私の質問はこれに非常に似ている:(Binding events to buttons in an ItemsControl)しかし、私はそこに解決策を見つけていませんでした。 私はItemsControlにを持っており、そのDataTemplateの内部で、私は別のItemsControlを持っています。外部コントロールのアイテムには、いくつかのプロパティを持つクラスが含まれ、プロパティの1つはコレクションです。インナーのItemsControlソースは、このコレクションにバインドされ、内部統制の内側にボタンがあるのDataTemplateされます。バインディング/配線イベント
私の問題は、ボタン(.. Click = "dummyfunc")のイベントを配線して、プロジェクトを実行しようとすると、未処理のXamlParseException(4004)が発生し、 "プロパティに割り当てられませんでした「System.Windows.Controls.Primitives.ButtonBase.Click」」 私は外ItemsControlには、XAMLに配置されているページの分離コードで私のイベントハンドラを宣言しました。そして、外部コントロールのDataTemplateに配置されたボタンに対してはうまく動作します。しかし、内部のコントロールのテンプレートでは、私はちょうどどんな出来事でも結構です。
<HyperlinkButton Content="x">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<ei:CallMethodAction MethodName="DeleteMe" TargetObject="{Binding}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</HyperlinkButton>
をしかし、これはいくつかのプロパティとコレクションを持って、私は上記の項目に実装されている唯一の方法(DeleteMe)トリガー:
ことの一つは、動作します。
sender as HyperinkButton
:
public void dummyfunc(object sender, RoutedEventArgs e){...}
(私は例のイベントを発射したボタンを取得することができます:
は、しかし、これに代えて、私は通常の方法で、内部コントロールでイベントを処理する必要があります
または
e.OriginalSource as HyperlinkButton
私はこの問題は、イベントがバブルアップと私は除いて解析を取得していないことであると仮定なぜなら、パーサは実際のスコープ内でイベントハンドラ宣言を見つけることができないからです。内側のコントロールのCodeBehindではありません。(
私はこれを必要とするのは、コードでカスタムUIロジックを行いたいからですこの後にのみ、DeleteMeロジックを何とかトリガーします。
おかげで、 バリント
TargetObjectを定義せずにclickイベントをトリガする方法はありますか?私はオブジェクト内ではなく、ネストされたItemsControlsを含むページのCodeBehind内でイベントを処理したいと思います。なぜなら、UIロジックは、データを保持するオブジェクトではなくページのCodeBehindで行うべきだと思うからです。 –
あなたは 'TargetObject =' {Binding ElementName = mainPage} ''のように 'TargetObject'を自由に設定することができます。 –
ああ、ありがとう、今は魅力のように動作します! :) (btwはそのバブルアップのことでしたか?つまり、内部のitemscontrolのボタンに単に書き込んだときに何が問題になったのでしょうか:Click = "dummyfunc"?) –