我有三个标签。只需单独点击,它们就会按照应有的方式单独突出显示。
这些标签后面有RelyCommand。每当点击mune时,程序应该带回第一个TabItem并且应该突出显示。但是,当单击第二个选项卡时,第一个选项卡不会按原样突出显示,尽管它的行为与单击它一样。它没有突出显示。
以下是
背后的代码查看级别的两个标签的xaml代码:
<StackPanel Orientation="Horizontal"
Background="{x:Null}">
<TabControl Height="50" Margin="12,0,0,0">
<TabItem Name="tiCaptureSetup" IsSelected="{Binding Path=IsCaptureSetupTabSelected, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}">
<TabItem.Header>
<Button Name="btnCaptureSetup"
Grid.Column="0"
Width="90"
Height="40"
Margin="5"
ToolTip="Capture Setup"
Content="Capture Setup"
Click="btnCaptureSetup_Click"
IsEnabled="{Binding Path=CaptureSetupButtonStatus, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"
IsDefault="True"
></Button>
</TabItem.Header>
</TabItem>
<TabItem Name="tiCapture" IsSelected="{Binding Path=IsCaptureTabSelected, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}">
<TabItem.Header>
<Button Name="btnCapture"
Grid.Column="0"
Margin="5"
Width="90"
Height="40"
ToolTip="Capture"
Content="Capture"
Click="btnCapture_Click"
IsEnabled="{Binding Path=CaptureButtonStatus, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"></Button>
</TabItem.Header>
</TabItem>
ViewModel级别的C#代码(CaptureSetup()
是用于单击第一个选项卡的RelyCommand,HardwareSetupLS()
是菜单上弹出窗口的RelyCommand,RefereshCaptureSetup()
是当弹出菜单窗口时,基本上试图检索第一个选项卡)
public void CaptureSetup()
{
Command command = new Command();
command.Message = "Capture Setup";
command.CommandGUID = new Guid("6ecb028e-754e-4b50-b0ef-df8f344b668e");
_eventAggregator.GetEvent<CommandShowDialogEvent>().Publish(command);
}
public void HardwareSetupLS()
{
//RefereshCaptureSetup(); // refresh panel when hardware setting window is loaded.
Command command = new Command();
command.Message = "HardwareSetupLS";
command.CommandGUID = new Guid("64c695e6-8959-496c-91f7-5a9a95d91e0d");
_eventAggregator.GetEvent<CommandShowDialogEvent>().Publish(command);
RefereshCaptureSetup();
}
public void RefereshCaptureSetup() // refresh CaptureSetup UI
{
_isCaptureSetupTabSelected = true;
_isCaptureTabSelected = false;
_isReviewTabSelected = false;
Command command = new Command();
command.Message = "Capture Setup";
command.CommandGUID = new Guid("{6ecb028e-754e-4b50-b0ef-df8f344b668e}");
_eventAggregator.GetEvent<CommandShowDialogEvent>().Publish(command);
}
此时我非常困惑我还能做些什么来使第一个TabItem突出显示它应该。
答案 0 :(得分:1)
我觉得您的问题中缺少一些重要的逻辑(例如IsCaptureSetupTabSelected
和IsCaptureTabSelected
如何更新),但无论如何,这里有三个关于查看代码的指示:
UpdateSourceTrigger=PropertyChanged
没用,因为您的绑定是OneWay
(从您的ViewModel中的源到您的UI,源永远不会更新)。如果您已经编写了一些预期会在鼠标点击后收到IsSelected
更改通知的逻辑,则不会发生这种情况。
您似乎正在更新绑定属性包含的内部属性(例如_isCaptureSetupTabSelected = true
而不是IsCaptureSetupTabSelected = true
),因此可能会错过正确的INotifyPropertyChanged
事件用户界面期待。
确保正确的TabItem
处于焦点位置。