【发布时间】:2017-01-26 12:26:54
【问题描述】:
我有一个继承自 Conductor<T>.Collection.OneActive 的 ViewModel。在视图中,我将DataGrid 绑定到Items 属性,并将ContentControl 绑定到ActiveItem。
<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>
它工作正常,除了一件事:我想在 Grid 的行之一被 DoubleClicked 时激活 DetailsViewModel。我的void test() 方法被很好地调用了,但我不能禁用 Click 方法。
有什么建议吗?
编辑
也许我不够清楚。我的问题是Conductor<T> 的默认行为。它不应该为单击左键而激活详细信息屏幕,而是双击。
编辑 2
在Nkosi的帮助下终于找到了一些解决方法:
只需将 ContentControl 绑定从 ActiveItem 更改为 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 的绑定方法中,您只需将ActiveScreen 设置为ActiveItem。
public void test()
{
ActiveScreen = ActiveItem;
}
【问题讨论】:
-
它会激活,因为一旦您选择项目,它就会成为激活它的 ActiveItem。即使您单击一个项目,然后使用上下箭头键,它也会激活每个选定的项目。
-
我明白了,但我怎样才能关闭此行为?
-
可能是选择更改时激活项目?
标签: c# wpf datagrid wpfdatagrid caliburn.micro