Привет, я создаю simpel MDI в микросхеме калибр примерно так: http://devlicio.us/blogs/rob_eisenberg/archive/2010/10/19/caliburn-micro-soup-to-nuts-part-6c-simple-mdi-with-screen-collections.aspx.Caliburn Micro simple MDI
Каждый элемент табуляции идентифицируется идентификатором (идентификатор - обозначение Displayname). Мне нужно открыть только один элемент вкладки для каждого элемента id.Tab - это пользовательский элемент управления.
Tab пункт вид модели класса здесь:
[Export(typeof(ITabChatViewModel))]
[PartCreationPolicy(CreationPolicy.NonShared)]
public class TabChatViewModel : Screen, IViewModelIdentity,
IPartImportsSatisfiedNotification,
ITabChatViewModel, IHandle<IRp>, IHandle<IDetailData>
{...}
Так что, если я активировать вкладку элемента в оболочке хранить вкладку ID в списке.
Мне нужно что-то удалить идентификатор табуляции из списка, когда элемент табуляции деактивирован.
Shell вид модель Класс:
[Export(typeof(IChatShellViewModel))]
public class ChatShellViewModel :
Conductor<IScreen>.Collection.OneActive,
IChatShellViewModel
{
//consist active tab item
List<string> ActiveTabItems { get; set; }
public ChatShellViewModel()
{
ActiveTabItems=new List<string>();
}
public void OpenChatTab(IScreen screen)
{
if(!ActiveTabItems.Contains(screen.DisplayName))
{
ActivateItem(screen);
ActiveTabItems.Add(screen.DisplayName);
}
}
}
Shell вид:
<Window x:Class="Spirit.Views.ChatShellView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:cal="clr-namespace:Caliburn.Micro;assembly=Caliburn.Micro"
Height="545"
Width="680">
<DockPanel>
<TabControl x:Name="Items">
<TabControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding DisplayName}"
VerticalAlignment="Center"/>
<Image Source="/images/icons/close.png"
Margin="8,4,4,4"
Height="16"
Width="16"
HorizontalAlignment="Right"
VerticalAlignment="Center"
cal:Message.Attach="[Event MouseLeftButtonDown]=[Action CloseItem($dataContext)]"/>
</StackPanel>
</DataTemplate>
</TabControl.ItemTemplate>
</TabControl>
</DockPanel>
</Window>
я могу добиться этого поведения с классом агрегатора событий и опубликовать сообщение из вкладки элемента вида модели класса на оболочечном виде модель класса когда элемент табуляции деактивирован.
Но я хотел бы использовать что-то более простое. Например, элемент вкладки может вызывать метод просмотра оболочки, когда он деактивирован.
Любые советы? Спасибо
Вы должны использовать кнопку вместо изображения + mousedown (а затем стилизовать ее), потому что она обрабатывает касание, стилусом и мышью взаимодействие с событием «Click» - оно также обрабатывает сценарий, где mousedown происходит на кнопке, но mouseup doesnt. –