0

我是新的winphone。我有绑定数据的问题。

我有一个具有 2 个属性的类天气Temp_C,并且Temp_F。我想将温度绑定到文本块。

我也有一个开关可以选择CF

当我切换到 C => 文本块绑定Temp_C时,当我切换到 F => 文本块绑定时,我该怎么办Temp_F

4

2 回答 2

0

Xaml

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <TextBlock TextAlignment="Center" FontSize="{StaticResource PhoneFontSizeExtraExtraLarge}" Grid.ColumnSpan="2" Grid.Row="0" x:Name="txtTemperature" />

        <RadioButton Checked="CentTempChecked" GroupName="Temperature" Grid.Column="0" Grid.Row="1" Content="C" />
        <RadioButton Checked="FarTempChecked" GroupName="Temperature" Grid.Column="1" Grid.Row="1" Content="F" />
    </Grid>

代码背后

using System.Globalization;

public partial class MainPage : PhoneApplicationPage
{
    private TemperatureUnitType temperatureUnitType = TemperatureUnitType.Celsius;

    public MainPage()
    {
        InitializeComponent();

        BindTemperature();
    }

    private void CentTempChecked(object sender, RoutedEventArgs e)
    {
        this.temperatureUnitType = TemperatureUnitType.Celsius;

        BindTemperature();
    }

    private void FarTempChecked(object sender, RoutedEventArgs e)
    {
        this.temperatureUnitType = TemperatureUnitType.Fahrenheit;

        BindTemperature();
    }

    private void BindTemperature()
    {
        var temperature = new Temperature();

        txtTemperature.Text = 
            this.temperatureUnitType == TemperatureUnitType.Celsius ? 
            temperature.Celsius.ToString(CultureInfo.InvariantCulture) : temperature.Fahrenheit.ToString(CultureInfo.InvariantCulture);
    }
}

public enum TemperatureUnitType
{
    Celsius = 0,
    Fahrenheit = 1,
}

public class Temperature
{
    public double Celsius { get { return 45.3d; } }
    public double Fahrenheit { get { return 96.3d; } }
}

在发布应用程序中,您可能应该使用 WP 工具包中的切换控件。您还应该在独立存储数据库中保持温度偏好。

于 2013-10-09T15:47:51.493 回答
0

一个解决方案可能是只有两个文本块,然后切换可见性:

<TextBlock Text="{Binding Temp_C}" Visibility="{Binding Checked,ElementName=temperatureTogled,Converter={StaticResource boolToVisibilityConverter}}"/>
    <TextBlock Text="{Binding Temp_F}" Visibility="{Binding Checked,ElementName=temperatureTogled,Converter={StaticResource boolToNotVisibilityConverter}}"/>

    <toolkit:ToggleSwitch  x:Name="temperatureTogled" .. />

或者,另一种解决方案只是在 viewModel 中添加一个 Temp 属性和一个 IsCelsus 属性,在 Temp 属性中的两个值之间进行切换并绑定 Temp 属性:

public class CurrentCondition : INotifyPropertyChanged
{
    private bool isC;

    public bool IsC
    {
        get { return isC; }
        set
        {
            if (isC != value)
            {
                isC = value;
                this.RaisePropertyChanged("IsC");
                this.RaisePropertyChanged("TempShow");
            }
        }
    }

    private string temp_C;

    public string Temp_C
    {
        get { return temp_C; }
        set
        {
            if (temp_C != value)
            {
                temp_C = value;
                this.RaisePropertyChanged("Temp_C");
                this.RaisePropertyChanged("TempShow");
            }
        }
    }

    private string temp_F;

    public string Temp_F
    {
        get { return temp_F; }
        set
        {
            if (temp_F != value)
            {
                temp_F = value;
                this.RaisePropertyChanged("Temp_F");
                this.RaisePropertyChanged("TempShow");
            }
        }
    }

    private string tempShow;

    public string TempShow
    {
        get
        {
            if (this.isC == true)
            {
                return temp_C + "°C";
            }
            else
            {
                return temp_F + "°F";
            }
            return tempShow;
        }
    }
}


 <TextBlock Text="{Binding TempShow}"/>
<toolkit:ToggleSwitch  x:Name="temperatureTogled" Checked="{Binding IsC,Mode=TwoWay}" />
于 2013-10-09T16:12:15.670 回答