已回答 如何保存dataContext的引用并将引用与wpf中的多个用户福彩12选5走势图绑定?

毁灭

活跃的成员
已加入
2020年3月28日
留言内容
36
编程经验
1-3
我有一个mainViewModel和一个主窗口,其中有4个用户福彩12选5走势图绑定到各自的视图模型。

MainViewModel基于inputViewModel.cs和InputView用户福彩12选5走势图进行一些计算,并在resultView中显示结果。

我想在MainViewModel中使用计算结果的数据上下文。到目前为止,我已经使用mainWindow.xaml.cs类设置新窗口的相同dataContext,方法如下:

C#:
namespace SweWPF
{
    /// <summary>
    /// Logique d'interaction pour MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            DataContext = new ViewModels.MainViewModel();         
        }
        public ViewModels.MainViewModel ViewModel { get { return (ViewModels.MainViewModel)DataContext; } }
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            ResultWindow resultWindow = new ResultWindow();
            resultWindow.DataContext = this.DataContext;
            resultWindow.Show();
        }

    }


这是MainWindow的xaml代码:
C#:
<Window x:Class="SweWPF.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        mc:Ignorable="d"
        xmlns:vm="clr-namespace:SweWPF.ViewModels"
        xmlns:vw="clr-namespace:SweWPF.Views"
        d:DataContext="{d:DesignInstance Type=vm:MainViewModel, IsDesignTimeCreatable=True}"
        Title="Manglam Stellaris"
        WindowState="Maximized"
        Height="384" Width="733">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="1*" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="280" />
            <ColumnDefinition Width="4*" />
        </Grid.ColumnDefinitions>

        <vw:ConfigView Grid.Row="0" Grid.ColumnSpan="2" DataContext="{Binding Config}" />

        <Grid Grid.Row="1">
            <Grid.RowDefinitions>
                <RowDefinition />
                <RowDefinition Height="Auto" />
            </Grid.RowDefinitions>
            <ScrollViewer Grid.Row="0" VerticalScrollBarVisibility="Auto" Grid.RowSpan="2"/>
            <vw:InputView DataContext="{Binding Input}" Grid.RowSpan="2" />
            <Button Grid.Row="1" Content="Calculation" Padding="16,8" Margin="0,244,21,0" Command="{Binding DoCalculationCommand, Mode=OneWay}" Click="Button_Click" />
        </Grid>

        <vw:ResultView Grid.Row="1" Grid.Column="1" DataContext="{Binding Result}"/>
    </Grid>
</Window>

这是ResultView UserControl xaml代码:

C#:
<UserControl x:Class="SweWPF.Views.ResultView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:vm="clr-namespace:SweWPF.ViewModels"
             mc:Ignorable="d"
             d:DataContext="{d:DesignInstance Type=vm:CalculationResultViewModel, IsDesignTimeCreatable=True}"
             d:DesignHeight="360" d:DesignWidth="629">
    <Grid>
        <ScrollViewer Padding="4">
            <StackPanel>
                <!-- Date 和 calculations -->
                <Label Style="{StaticResource SectionLabel}">Date 和 calculation</Label>
                <Grid Grid.Column="0">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition />
                        <ColumnDefinition />
                        <ColumnDefinition />
                    </Grid.ColumnDefinitions>

                    <Label Grid.Row="0" Grid.Column="0" Content="Date UTC" Style="{StaticResource CaptionLabel}"/>
                    <Label Grid.Row="1" Grid.Column="0" Content="{Binding DateUTC}" />

                    <Label Grid.Row="0" Grid.Column="1" Content="Julian Day" Style="{StaticResource CaptionLabel}"/>
                    <Label Grid.Row="1" Grid.Column="1" Content="{Binding JulianDay}" />

                    <Label Grid.Row="0" Grid.Column="2" Content="Delta T" Style="{StaticResource CaptionLabel}"/>
                    <Label Grid.Row="1" Grid.Column="2" Content="{Binding DeltaTSec}" />

                    <Label Grid.Row="2" Grid.Column="0" Content="Ephemeris Time" Style="{StaticResource CaptionLabel}"/>
                    <Label Grid.Row="3" Grid.Column="0" Content="{Binding EphemerisTime}" />

                    <Label Grid.Row="2" Grid.Column="1" Content="Sideral Time" Style="{StaticResource CaptionLabel}"/>
                    <Label Grid.Row="3" Grid.Column="1" Content="{Binding SideralTime, ConverterParameter=hour, Converter={StaticResource DoubleToTimeFormatConverter}}" />

                    <Label Grid.Row="4" Grid.Column="0" Content="Mean Ecliptic Obliquity" Style="{StaticResource CaptionLabel}"/>
                    <Label Grid.Row="5" Grid.Column="0" Content="{Binding MeanEclipticObliquity, Converter={StaticResource DoubleToDegreesFormatConverter}}" />

                    <Label Grid.Row="6" Grid.Column="0" Content="True Ecliptic Obliquity" Style="{StaticResource CaptionLabel}"/>
                    <Label Grid.Row="7" Grid.Column="0" Content="{Binding TrueEclipticObliquity, Converter={StaticResource DoubleToDegreesFormatConverter}}" />

                    <Label Grid.Row="4" Grid.Column="1" Content="Nutation in Longitude" Style="{StaticResource CaptionLabel}" />
                    <Label Grid.Row="5" Grid.Column="1" Content="{Binding NutationLongitude, Converter={StaticResource DoubleToDegreesFormatConverter}}" />

                    <Label Grid.Row="6" Grid.Column="1" Content="Nutation Obliquity" Style="{StaticResource CaptionLabel}" />
                    <Label Grid.Row="7" Grid.Column="1" Content="{Binding NutationObliquity, Converter={StaticResource DoubleToDegreesFormatConverter}}" />

                    <Label Grid.Row="4" Grid.Column="2" Content="ARMC" Style="{StaticResource CaptionLabel}" />
                    <Label Grid.Row="5" Grid.Column="2" Content="{Binding ARMC, Converter={StaticResource DoubleToDegreesFormatConverter}}" />
                </StackPanel>
        </ScrollViewer>
    </Grid>
</UserControl>


当我单击“计算”按钮时,“我的新窗口”打开,并显示与MainWindow相同的ResultView用户福彩12选5走势图,但我想创建自定义用户福彩12选5走势图,该福彩12选5走势图将放置在另一个名为ResultWindow的窗口中,并且可以使用下拉组合键切换用户福彩12选5走势图。

所有用户福彩12选5走势图都必须继承与mainWindow相同的数据上下文。有人可以通过创建datacontext的各个引用为我指出正确的方向,以指示要在用户福彩12选5走势图之间共享dataContext的步骤吗?
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,497
地点
弗吉尼亚州切萨皮克
编程经验
10+
没有限制,即视图模型的类型与视图之间存在一对一的关系。您可以让多种类型的窗口共享一个共同的视图模型类型,或者您可以让一个窗口支持不同类型的视图模型。

此外,您还可以使多个窗口共享视图模型的相同实例。例如,您可以让一个用户福彩12选5走势图显示一个饼图,另一个用户福彩12选5走势图显示一个热图,而另一个用户福彩12选5走势图显示一个数据网格,但是让他们三个共享一个特定视图模型的相同实例。
 

毁灭

活跃的成员
已加入
2020年3月28日
留言内容
36
编程经验
1-3
没有限制,即视图模型的类型与视图之间存在一对一的关系。您可以让多种类型的窗口共享一个共同的视图模型类型,或者您可以让一个窗口支持不同类型的视图模型。

此外,您还可以使多个窗口共享视图模型的相同实例。例如,您可以让一个用户福彩12选5走势图显示一个饼图,另一个用户福彩12选5走势图显示一个热图,而另一个用户福彩12选5走势图显示一个数据网格,但是让他们三个共享一个特定视图模型的相同实例。
那么,如何以所有用户福彩12选5走势图都可以使用的方式创建实例以及数据上下文呢?
 

毁灭

活跃的成员
已加入
2020年3月28日
留言内容
36
编程经验
1-3
那么,如何以所有用户福彩12选5走势图都可以使用的方式创建实例以及数据上下文呢?
您能给我一个使用上述mainViewModel的示例,以将其数据上下文与新的用户福彩12选5走势图绑定吗?
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,497
地点
弗吉尼亚州切萨皮克
编程经验
10+
您已经在OP中使用上面的16-17行进行了此操作。您正在创建实例并设置DataContext。基本上,您正在进行属性注入。您可以使用户福彩12选5走势图的构造函数将视图模型作为参数并进行构造函数注入。
 

毁灭

活跃的成员
已加入
2020年3月28日
留言内容
36
编程经验
1-3
您已经在OP中使用上面的16-17行进行了此操作。您正在创建实例并设置DataContext。基本上,您正在进行属性注入。您可以使用户福彩12选5走势图的构造函数将视图模型作为参数并进行构造函数注入。
听起来不错,我将继续尝试。

对于每个新的用户福彩12选5走势图,我都构建一个新的视图模型吗?我希望这是唯一的情况,因为将有多个使用相同dataContext的用户福彩12选5走势图,但在可观察的集合中存储了不同的值。你可否确认?
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,497
地点
弗吉尼亚州切萨皮克
编程经验
10+
最佳 底部