C# MVVM如何将数据绑定到多个实例控件

C# MVVM如何将数据绑定到多个实例控件,c#,wpf,mvvm,data-binding,C#,Wpf,Mvvm,Data Binding,如果一个用户控件有多个实例,如何使用数据绑定为每个控件更新同名属性 例如,以下是我的主windows设计的一部分: myVoltCtrl是我要显示的控件,例如,电压。 我有两个控件用于显示来自两个传感器的样本。 我有一个显示电压的viewmodel:ProgressPv 我的问题是我的ViewModel如何区分它正在更新的传感器? 或者我必须为每个传感器控件创建两个独立的viewmodels实例吗 我做了很多搜索,但仍然不知道如何才能做到这一点 提前谢谢 <Grid

如果一个用户控件有多个实例,如何使用数据绑定为每个控件更新同名属性

例如,以下是我的主windows设计的一部分:

myVoltCtrl是我要显示的控件,例如,电压。 我有两个控件用于显示来自两个传感器的样本。 我有一个显示电压的viewmodel:ProgressPv

我的问题是我的ViewModel如何区分它正在更新的传感器? 或者我必须为每个传感器控件创建两个独立的viewmodels实例吗

我做了很多搜索,但仍然不知道如何才能做到这一点

提前谢谢

            <Grid Grid.Row="0">
                <local:myVoltCtrl x:Name="Sensor1" MinHeight="5" MinWidth="5"  Volt="{Binding ProgessPv}">
                </local:myVoltCtrl>
            </Grid>
            <Grid Grid.Row="1">
                <local:myVoltCtrl x:Name="Sensor2" MinHeight="5" MinWidth="5"  Volt="{Binding ProgessPv}" >
                </local:myVoltCtrl>
            </Grid>


您的ViewModel不应该关心它正在更新的是哪个用户控件,因为它不(也不应该知道)任何用户控件。如果您有两个不同的值,那么您的传感器需要绑定到两个不同的属性,例如
ProgressPv1
ProgressPv2
并绑定到它们。然后,ViewModel更新其中一个,并引发
PropertyChanged
事件,通知查看是否存在更改数据绑定仅将值发送到属性。因此,视图模型没有更新属性的信息。这是一个普遍的事实。类永远不知道谁访问属性或谁调用方法。成员访问是匿名的。如果这很重要,您可以为每个传感器使用专用属性。或使用命令更新值。例如,可以使用CommandParameter将元信息对象传递给视图模型。但是您的视图模型不应该了解视图。为什么视图模型需要知道哪个视图更新了属性?视图模型只关心数据。只需将每个
Volt
属性绑定到视图模型中的不同属性。e、 g.
PortGeneratorVolts
StarboardGeneratorVolts
。你只需要一个VMOh,我明白了!我一直坚持将数据与视图关联的非mvvm思想(即,使某些数据属于特定视图),而视图确实应该是不可知数据源的。顺便问一下,虽然可以使用单独的属性,但有没有办法避免重复的属性定义代码?因为这通常是由数组或列表完成的:例如,ctrlSensors[i].Volt=sampledVoltData[i]。我需要创建控件列表和相应的视图列表吗?您的ViewModel不应该关心它正在更新哪个控件,因为它不(也不应该知道)任何用户控件。如果您有两个不同的值,那么您的传感器需要绑定到两个不同的属性,例如
ProgressPv1
ProgressPv2
并绑定到它们。然后,ViewModel更新其中一个,并引发
PropertyChanged
事件,通知查看是否存在更改数据绑定仅将值发送到属性。因此,视图模型没有更新属性的信息。这是一个普遍的事实。类永远不知道谁访问属性或谁调用方法。成员访问是匿名的。如果这很重要,您可以为每个传感器使用专用属性。或使用命令更新值。例如,可以使用CommandParameter将元信息对象传递给视图模型。但是您的视图模型不应该了解视图。为什么视图模型需要知道哪个视图更新了属性?视图模型只关心数据。只需将每个
Volt
属性绑定到视图模型中的不同属性。e、 g.
PortGeneratorVolts
StarboardGeneratorVolts
。你只需要一个VMOh,我明白了!我一直坚持将数据与视图关联的非mvvm思想(即,使某些数据属于特定视图),而视图确实应该是不可知数据源的。顺便问一下,虽然可以使用单独的属性,但有没有办法避免重复的属性定义代码?因为这通常是由数组或列表完成的:例如,ctrlSensors[i].Volt=sampledVoltData[i]。我是否需要制作控件列表和相应的视图列表?