主窗口Xaml
<StackPanel>
<TabControl x:Name="MainTabControl" SelectedIndex="{Binding selected}">
<TabItem Header="Entry Form" TabIndex="0">
<views:EntryForm />
</TabItem>
<TabItem Header="Result" TabIndex="1">
<views:DistanceResults />
</TabItem>
</TabControl>
</StackPanel>
XAML报名表
<Button
Command="{Binding MeasureDistanceCommand}"
Content="Measure Distances"
Style="{StaticResource BtnGreen}" />
private void MeasureDistance()
{
if (!Helper.TryParseLatitude(StartLatitude, out var latitude)) return;
if (!Helper.TryParseLongitude(StartLongitude, out var longitude)) return;
var Startlocation = new Location(latitude, longitude);
//todo iterate through he list of the end points and measure there distance
//todo pass the values to the result tab
//todo navigate to the result tab
}
我正在使用WPF C#MVVM-具有标准的BaseViewModel 我在主窗口中有一个TabControl,还有2个选项卡项。
我想做的是单击EntryForm上的Measure Distance按钮,并且EntryFormViewModel中的命令完成了为结果视图准备数据的过程。我想以编程方式使DistanceResults TabItem处于活动状态,并将需要显示的数据传递给它。
这是针对WPF距离测量应用程序的,该应用程序是开源的,并且正在我的Twitch流中进行开发,但是我无法找到一种方法来完成上述操作。该项目在这里
https://github.com/copperbeardy/GPSDistanceMeasure
感谢您的任何帮助和建议
答案 0 :(得分:0)
我认为您可以将Tabitem的IsSelected属性绑定到一个布尔值上,以强制执行该选择,但是,应该在整个tabcontrol的数据上下文视图模型中完成此操作,并且还应利用从事件棱镜到事件聚合器的优势。将数据发送到另一个VM。
流可能是这样的:
因此,您将能够一次完成两件事,发送数据并选择标签。
Ps。我想您也可以使用Composite Commands并获得几乎相同的结果。您可以检查here之间的区别。
编辑:我已经在您的代码中实现了它,并发送了PR ...