【发布时间】:2015-10-13 19:44:59
【问题描述】:
我正在为传感器实现一个接口。因此,我创建了一个类 TestSensor、一个 ViewModel MainViewModel 和 GUI 本身。
在 GUI 中,我有 ComboBox,它有几个可以显示的单元。标准单位是微应变,这也是读取数据的单位。 读入数据后,我设法将其转换为所需的其他单位。这些值保存在传感器对象本身中。
我现在的问题:
我该怎么做才能让标签显示所选单位?这样当我将单位从 microStrain 更改为例如ton,它会将所有Label更新为存储在ton中的值?
我知道转换器,但肯定有其他方法,尤其是因为我有不止一种可能的转换!我对 XAML 和 C# 比较陌生,所以我真的希望有人能指出一个使这成为可能的解决方案。
这是代码:
类测试传感器
class TestSensor : ModelBase
{
double sensorDatauStrain;
public double SensorDatauStrain
{
get { return sensorDatauStrain; }
set
{
if (sensorDatauStrain != value)
{
sensorDatauStrain = value;
this.OnPropertyChanged();
}
}
}
double sensorDatakNewton;
public double SensorDatakNewton
{
get { return sensorDatakNewton; }
set
{
if (sensorDatakNewton != value)
{
sensorDatakNewton = value;
this.OnPropertyChanged();
}
}
}
double sensorDataTon;
public double SensorDataTon
{
get { return sensorDataTon; }
set
{
if (sensorDataTon != value)
{
sensorDataTon = value;
this.OnPropertyChanged();
}
}
}
double sensorDatausTon;
public double SensorDatausTon
{
get { return sensorDatausTon; }
set
{
if (sensorDatausTon != value)
{
sensorDatausTon = value;
this.OnPropertyChanged();
}
}
}
string sensorName;
public string SensorName
{
get { return sensorName; }
set
{
if (sensorName != value)
{
sensorName = value;
this.OnPropertyChanged();
}
}
}
public TestSensor(string name, double ustrain)
{
this.SensorName = name;
this.SensorDatauStrain = ustrain;
}
public void UpdateUnits(double emodule, double diameter)
{
SensorDatakNewton = (SensorDatauStrain * 1000000) / (emodule * diameter);
SensorDataTon = 9.81 * SensorDatakNewton;
SensorDatausTon = 1.1 * SensorDatausTon;
}
}
VM 中表示的传感器:
public MainViewViewModel()
{
Sensor11 = new TestSensor("Sensor 1.1", 0);
Sensor12 = new TestSensor("Sensor 1.2", 0);
Sensor21 = new TestSensor("Sensor 2.1", 0);
Sensor22 = new TestSensor("Sensor 2.2", 0);
Sensor31 = new TestSensor("Sensor 3.1", 0);
Sensor32 = new TestSensor("Sensor 3.2", 0);
Sensor41 = new TestSensor("Sensor 4.1", 0);
Sensor42 = new TestSensor("Sensor 4.2", 0);
SideFactors = new Factors(100, 210);
LimitPos = 0;
LimitNeg = 0;
}
//-----------------Chosen unit------------------
Unit unit;
public Unit Unit
{
get { return unit; }
set
{
if (unit != value)
{
unit = value;
this.OnPropertyChanged();
}
}
}
//----------------One of the Sensors------------------------------
TestSensor sensor11;
public TestSensor Sensor11
{
get { return sensor11; }
set
{
if (sensor11 != value)
{
sensor11 = value;
this.OnPropertyChanged();
this.OnPropertyChanged("SubTotal1");
this.OnPropertyChanged("Average");
}
}
}
这是 XAML 代码:
标签:
<Label Grid.Column="0" Grid.Row="1" Margin="0,0,1,1" FontSize="8" Content="{Binding Sensor11.SensorDatauStrain, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" />
组合框:
<ComboBox x:Name="comboBox" IsReadOnly="True" VerticalAlignment="Center"
ItemsSource="{Binding Source={data:EnumBindingSource {x:Type data:Unit}}}" SelectedItem="{Binding Unit, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
这是 GUI 的样子:
感谢您的帮助!
【问题讨论】:
标签: c# wpf xaml mvvm data-binding