Próbuję użyć Caliburn mikro wiadomość do wyzwalania załączony zdarzenie, które stworzyłem:używając załączonego wydarzenia z Caliburn mikro Message.Attach
public static class DataChanging
{
public delegate void DataChangingEventHandler(object sender, DataChangingEventArgs e);
public static readonly RoutedEvent ChangingEvent =
EventManager.RegisterRoutedEvent("Changing",
RoutingStrategy.Bubble,
typeof(DataChangingEventHandler),
typeof(DataChanging));
public static void AddChangingHandler(DependencyObject o, DataChangingEventHandler handler)
{
((UIElement)o).AddHandler(DataChanging.ChangingEvent, handler);
}
public static void RemoveChangingHandler(DependencyObject o, DataChangingEventHandler handler)
{
((UIElement)o).RemoveHandler(DataChanging.ChangingEvent, handler);
}
public static bool GetActivationMode(DependencyObject obj)
{
return (bool)obj.GetValue(ActivationModeProperty);
}
public static void SetActivationMode(DependencyObject obj, bool value)
{
obj.SetValue(ActivationModeProperty, value);
}
public static readonly DependencyProperty ActivationModeProperty =
DependencyProperty.RegisterAttached("ActivationMode",
typeof(bool),
typeof(DataChanging),
new FrameworkPropertyMetadata(false,
HandleActivationModeChanged));
private static void HandleActivationModeChanged(DependencyObject target, DependencyPropertyChangedEventArgs e)
{
var dataGrid = target as XamDataGrid;
if (dataGrid == null) // if trying to attach to something else than a datagrid, just ignore
return;
if ((bool)e.NewValue)
{
dataGrid.RecordDeactivating += selector_RecordDeactivating;
}
else
{
dataGrid.RecordDeactivating -= selector_RecordDeactivating;
}
}
static void selector_RecordDeactivating(object sender, RecordDeactivatingEventArgs e)
{
var args = new DataChangingEventArgs(DataChanging.ChangingEvent,sender)
{
Data = ((DataRecord) e.Record).DataItem,
ShouldCancelChange = false
};
(sender as UIElement).RaiseEvent(args);
e.Cancel = args.ShouldCancelChange;
}
}
W samej XAML I dodaje następujący wiersz:
cal:Message.Attach="[Helpers:DataChanging.Changing] = [Action SelectedDataChanged($eventArgs)]"
Pomocnicy odnoszą się do właściwej przestrzeni nazw. Próbowałem również inne wersje, które nie powiodło się (pełne nazw):
cal:Message.Attach="[clr-namespace:RTF.Client.UI.Helpers.DataChanging.Changing] = [Action SelectedDataChanged($eventArgs)]"
próbowano ustawić zdarzenie interakcji przez siebie:
Kiedy próbowałem dodając normalne zdarzenie wywoła wszystko działało dobrze, więc nie jest to moja dołączona deklaracja zdarzenia:
<EventTrigger RoutedEvent="Helpers:DataChanging.Changing">
<EventTrigger.Actions>
<BeginStoryboard x:Name="sb">
<Storyboard x:Name="dsf">
<Storyboard x:Name="myStoryboard">
<BooleanAnimationUsingKeyFrames Storyboard.TargetName="SSS" Storyboard.TargetProperty="IsChecked">
<DiscreteBooleanKeyFrame KeyTime="00:00:00" Value="False" />
</BooleanAnimationUsingKeyFrames>
</Storyboard>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
Co ja robię Wro Tutaj? Nie można podłączyć dołączonego zdarzenia i wywołać go za pomocą narzędzia caliburn micro?
Próbowałem, ale wiadomość działanie Caliburn ma zastosowanie jedynie jako działanie na układ .windows. wyzwalacz interactivity.Event, a nie normalny. szczerze mówiąc nie jestem pewien jaka jest różnica między 2. Nie byłem w stanie uruchomić mojego zdarzenia przy użyciu wyzwalacza system.windows.interactivity.event. – Clueless