gpt4 book ai didi

c# - Caliburn.Micro 禁用 ItemsControl 的默认点击事件

转载 作者:太空狗 更新时间:2023-10-30 01:30:58 25 4
gpt4 key购买 nike

我有一个继承自 Conductor<T>.Collection.OneActive 的 ViewModel .在 View 中我绑定(bind)了一个 DataGridItems属性(property)和ContentControlActiveItem .

<ContentControl x:Name="ActiveItem" DockPanel.Dock="Top"/>
<DataGrid x:Name="Items" AutoGenerateColumns="False" SelectionMode="Single" DockPanel.Dock="Top"
cal:Message.Attach="[Event MouseDoubleClick] = [Action test]">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding CountryCode}" Width="10*"/>
<DataGridTextColumn Binding="{Binding Country}" Width="90*" />
</DataGrid.Columns>
</DataGrid>
</ContentControl>

它工作正常,除了一件事:我想激活 DetailsViewModel当网格的行之一被双击时。我的void test()方法被很好地调用,但我无法禁用 Click 方法。

有什么建议吗?

编辑

可能是我说的不够清楚。我的问题是 Conductor<T> 的默认行为.它不应该通过一次左键单击激活详细信息屏幕,而是双击。

编辑 2

通过 Nkosi的帮助终于想出了一些解决方法:简单地从 ActiveItem 更改了 ContentControl 绑定(bind)至 ActiveScreen .

<ContentControl x:Name="ActiveScreen" DockPanel.Dock="Top"/>

在 ViewModel 中创建了 ActiveScreen属性:

private T mActiveScreen;
public T ActiveScreen
{
get { return mActiveScreen; }
set
{
mActiveScreen = value;
NotifyOfPropertyChange(() => ActiveScreen);
}
}

MouseDoubleClick 的绑定(bind)方法中你只需要设置 ActiveScreenActiveItem .

    public void test()
{
ActiveScreen = ActiveItem;
}

最佳答案

Caliburn 具有 Action 守卫功能,其中 Can{MethodName} 充当要调用的 Action 的守卫。只要遵循约定,它就可以是属性或其他方法。

给定

public void test() { ... }

它的守卫看起来像

public bool Cantest {
get { return //..what ever is the condition needed to allow/disable action
}

public bool Cantest() {
return //..what ever is the condition needed to allow/disable action
}

Caliburn documentation - All About Actions

Another important feature to note is Action guards. When a handler is found for the “SayHello” message, it will check to see if that class also has either a property or a method named “CanSayHello.” If you have a guard property and your class implements INotifyPropertyChanged, then the framework will observe changes in that property and re-evaluate the guard accordingly.

关于c# - Caliburn.Micro 禁用 ItemsControl 的默认点击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41873446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com