Tôi đang cố gắng sử dụng thông điệp vi caliburn để kích hoạt một sự kiện gắn liền mà tôi tạo ra:sử dụng các sự kiện gắn liền với caliburn vi 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;
}
}
Trong XAML bản thân tôi đã thêm dòng sau:
cal:Message.Attach="[Helpers:DataChanging.Changing] = [Action SelectedDataChanged($eventArgs)]"
Người trợ giúp tham khảo không gian tên phù hợp. Tôi cũng đã cố gắng phiên bản khác mà thất bại (full namespace):
cal:Message.Attach="[clr-namespace:RTF.Client.UI.Helpers.DataChanging.Changing] = [Action SelectedDataChanged($eventArgs)]"
cố gắng để thiết lập các sự kiện tương tác bằng cách bản thân mình:
Khi tôi cố gắng thêm một sự kiện bình thường gây ra tất cả mọi thứ hoạt động tốt, do đó, nó không phải là tuyên bố sự kiện đính kèm của tôi:
<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>
Tôi đang làm gì vậy ng đây? Không có cách nào để đính kèm một sự kiện đính kèm và gọi nó bằng cách sử dụng micro caliburn?
Tôi đã thử nó, nhưng thông điệp Caliburn hành động này chỉ áp dụng khi hành động để hệ thống .các cửa sổ. tương tác.Event kích hoạt và không phải là bình thường. thành thật mà nói, tôi không chắc chắn sự khác biệt giữa 2. Tôi đã không thể bắt đầu sự kiện của mình bằng cách sử dụng trình kích hoạt system.windows.interactivity.event. – Clueless