我有一个带有项目标题和内容模板 Select 器的选项卡控件
<Grid.Resources>
<DataTemplate x:Key="newTabButtonContentTemplate"/>
<DataTemplate x:Key="newTabButtonHeaderTemplate">
<Button Content="Add New Tab" Command="{Binding ElementName=parentUserControl, Path=DataContext.NewCommand}"
HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch">
</Button>
</DataTemplate>
<DataTemplate x:Key="itemContentTemplate" DataType="{x:Type localNS:ItemViewModel}">
<views:Ladder DataContext="{Binding ItemLadderViewModel}"/>
</DataTemplate>
<DataTemplate x:Key="itemHeaderTemplate" DataType="{x:Type localNS:ItemViewModel}">
<TextBlock Text="{Binding Header}"/>
</DataTemplate>
<templates:TemplateSelector x:Key="headerTemplateSelector"
NewButtonTemplate="{StaticResource newTabButtonHeaderTemplate}"
ItemTemplate="{StaticResource itemHeaderTemplate}"/>
<templates:TemplateSelector x:Key="contentTemplateSelector"
NewButtonTemplate="{StaticResource newTabButtonContentTemplate}"
ItemTemplate="{StaticResource itemContentTemplate}"/>
</Grid.Resources>
视图模型
MainWindowViewModel
public MainWindowViewModel()
{
this.newCommand = new CustomDelegateCommand(
() =>
{
var itemViewModel = new ItemViewModel();
Items.Add(itemViewModel);
this.CurrentSelectedItem = itemViewModel;
}
);
}
private ObservableCollection<ItemViewModel> items;
public ObservableCollection<ItemViewModel> Items
{
get
{
if (items == null)
{
items = new ObservableCollection<ItemViewModel>();
var itemViewModel = new ItemViewModel();
Items.Add(itemViewModel);
this.CurrentSelectedItem = itemViewModel;
var itemsView = (IEditableCollectionView)CollectionViewSource.GetDefaultView(items);
itemsView.NewItemPlaceholderPosition = NewItemPlaceholderPosition.AtEnd;
}
return items;
}
}
public ItemViewModel CurrentSelectedItem
{
get { return this.currentSelectedItem; }
set
{
this.currentSelectedItem = value;
this.OnPropertyChanged();
}
}
ItemViewModel
public class ItemViewModel : BindableBase
{
private string header = "New Tab";
private LadderViewModel itemLadderViewModel;
public ItemViewModel()
{
itemLadderViewModel = new LadderViewModel();
Messenger.Default.Register<Instrument>(this, "InstrumentChanged", instrument =>
{
this.Header = instrument.FullName;
});
}
public LadderViewModel ItemLadderViewModel
{
get { return itemLadderViewModel; }
}
public string Header
{
get { return header; }
set
{
header = value;
OnPropertyChanged();
}
}
}
usercontrol有一个包含条目的组合框,如果 Select 了任何条目,则应使用该选定条目更改选项卡标题.我使用gala messenger在对象之间传递消息,因此当 Select combobox时,消息会被发送,并且标头会相应地更改,这也可以工作,但是
The problem is:它更改了所有选项卡的标题,我希望只有在该选项卡中 Select 了组合框项时才能更改选项卡的标题.
public class LadderViewModel : BindableBase
{
private Instrument ladderInstrumentName = null;
public Instrument LadderInstrumentName
{
get
{
return this.ladderInstrumentName;
}
set
{
this.ladderInstrumentName = value;
Messenger.Default.Send<Instrument>(value, "InstrumentChanged");
}
}
}
我想知道这是否是正确的做法,如果是,问题是什么,如果不是,那么什么是正确的做法.
谢谢