2017-01-31 4 views
0

Я работаю над приложением для конвертера окон конвертера валют. Я сделал один раньше, но это было просто. Просто возьмите значение (в пакистанских рупиях) из TextBox и преобразуйте его в доллары США, используя жесткий код, сделанный в другом классе, который использует интерфейс IValueConverter.
Теперь я пытаюсь сделать более продвинутую версию. Я хочу, чтобы этот пользователь вводил значение в TextBox, тогда он/она выберет две разные валюты из двух ListBoxes (From и To соответственно.), После чего он/она нажмет кнопку Convert 2 Преобразует значение из одной валюты в другую Валюта.
Проблема заключается в том, как мне получить значение TextBox, определить выбор ListItems из этих ListBoxes, определить курс валюты и конвертировать?Как сделать конвертер валют в приложении магазина Windows, используя интерфейс IValueConverter?

Я, очевидно, добавляю скриншоты и код. Пожалуйста, взгляните на них и попытайтесь решить мою проблему.

ScreenShot Application Main Screen

XAML код

<Page.TopAppBar> 
     <CommandBar Background="#2ecc71" 
        IsSticky="True" 
        IsOpen="True" 
        BorderBrush="White" 
        Height="80"> 
      <AppBarButton Name="App" 
          Content="App" 
          Icon="Page"/> 
      <AppBarButton Name="Settings" 
          Content="Settings" 
          Icon="Setting"/> 
     </CommandBar> 
    </Page.TopAppBar> 
    <Grid Background="#2ecc71"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="*"/> 
      <RowDefinition Height="8*"/> 
      <RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*"/> 
      <ColumnDefinition Width="8*"/> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 
     <StackPanel Name="AppOuterContainer" 
        Grid.Row="1" 
        Grid.Column="1" 
        Width="auto" 
        Height="auto"> 
      <Grid> 
       <Grid.RowDefinitions> 
        <RowDefinition Height="*"/> 
        <RowDefinition Height="*"/> 
        <RowDefinition Height="*"/> 
        <RowDefinition Height="*"/> 
        <RowDefinition Height="*"/> 
        <RowDefinition Height="*"/> 
        <RowDefinition Height="*"/> 
        <RowDefinition Height="*"/> 
       </Grid.RowDefinitions> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="*"/> 
        <ColumnDefinition Width="2*"/> 
        <ColumnDefinition Width="*"/> 
       </Grid.ColumnDefinitions> 
       <TextBlock Name="Heading" 
          Text="Enter a value to convert." 
          Grid.Row="0" 
          Grid.Column="1" 
          HorizontalAlignment="Center" 
          Height="40" 
          FontFamily="Segoe Ui Light" 
          FontWeight="Light" 
          FontSize="32" 
          Margin="10"/> 
       <TextBox Name="ValueInput" 
         Width="500" 
         Height="60" 
         FontFamily="Segoe Ui Light" 
         FontWeight="Bold" 
         FontSize="26" 
         HorizontalAlignment="Center" 
         Grid.Row="1" 
         Grid.Column="1"/> 
       <TextBlock Text="From" 
          Grid.Row="2" 
          Grid.Column="1" 
          HorizontalAlignment="Center" 
          Height="40" 
          FontFamily="Segoe Ui Light" 
          FontWeight="Light" 
          FontSize="32" 
          Margin="10"/> 
       <ListView Name="FromContainer" ItemsSource="{Binding}" 
          Grid.Row="3" 
          Grid.Column="1" 
          Width="500" 
          Height="65" 
          HorizontalAlignment="Center"> 
        <ListView.ItemTemplate> 
         <DataTemplate> 
          <StackPanel> 
           <Grid> 
            <Grid.ColumnDefinitions> 
             <ColumnDefinition Width="2*"/> 
             <ColumnDefinition Width="6*"/> 
            </Grid.ColumnDefinitions> 
            <Image Source="{Binding FlagImg}" 
              Width="auto" 
              Height="60" 

              Grid.Column="0" Stretch="Fill"/> 
            <StackPanel Width="auto" 
               Height="60" 
               Grid.Column="1"> 
             <Grid> 
              <Grid.RowDefinitions> 
               <RowDefinition Height="*"/> 
               <RowDefinition Height="*"/> 
              </Grid.RowDefinitions> 
              <TextBlock Name="CountryName" 
                 Text="{Binding Name}" 
                 Grid.Row="0" 
                 FontFamily="Segoe Ui Light" 
                 FontWeight="Bold" 
                 FontSize="28" 
                 Margin="10 0 0 0" 
                 Foreground="White"/> 
              <TextBlock Name="Currency" 
                 Text="{Binding Currency}" 
                 Grid.Row="1" 
                 FontFamily="Segoe Ui Light" 
                 FontWeight="Light" 
                 FontSize="22" 
                 Margin="10 0 0 0" 
                 Foreground="White"/> 
             </Grid> 
            </StackPanel> 
           </Grid> 
          </StackPanel> 
         </DataTemplate> 
        </ListView.ItemTemplate> 
       </ListView> 
       <TextBlock Text="To" 
          Grid.Row="4" 
          Grid.Column="1" 
          HorizontalAlignment="Center" 
          Height="40" 
          FontFamily="Segoe Ui Light" 
          FontWeight="Light" 
          FontSize="32" 
          Margin="10"/> 
       <ListView Name="ToContainer" ItemsSource="{Binding}" 
          Grid.Row="5" 
          Grid.Column="1" 
          Width="500" 
          Height="65" 
          HorizontalAlignment="Center"> 
        <ListView.ItemTemplate> 
         <DataTemplate> 
          <StackPanel> 
           <Grid> 
            <Grid.ColumnDefinitions> 
             <ColumnDefinition Width="2*"/> 
             <ColumnDefinition Width="6*"/> 
            </Grid.ColumnDefinitions> 
            <Image Source="{Binding FlagImg}" 
              Width="auto" 
              Height="60" 

              Grid.Column="0" Stretch="Fill"/> 
            <StackPanel Width="auto" 
               Height="60" 
               Grid.Column="1"> 
             <Grid> 
              <Grid.RowDefinitions> 
               <RowDefinition Height="*"/> 
               <RowDefinition Height="*"/> 
              </Grid.RowDefinitions> 
              <TextBlock Name="CountryName" 
                 Text="{Binding Name}" 
                 Grid.Row="0" 
                 FontFamily="Segoe Ui Light" 
                 FontWeight="Bold" 
                 FontSize="28" 
                 Margin="10 0 0 0" 
                 Foreground="White"/> 
              <TextBlock Name="Currency" 
                 Text="{Binding Currency}" 
                 Grid.Row="1" 
                 FontFamily="Segoe Ui Light" 
                 FontWeight="Light" 
                 FontSize="22" 
                 Margin="10 0 0 0" 
                 Foreground="White"/> 
             </Grid> 
            </StackPanel> 
           </Grid> 
          </StackPanel> 
         </DataTemplate> 
        </ListView.ItemTemplate> 
       </ListView> 
       <Button Name="ConvertBtn" 
         Content="Convert" 
         Width="200" 
         Height="60" 
         Margin="10" 
         Background="White" 
         Foreground="#2ecc71" 
         FontFamily="Segoe Ui Light" 
         FontSize="28" 
         Grid.Row="6" 
         Grid.Column="1" 
         HorizontalAlignment="Center"/> 
       <TextBlock Name="Result" 
          Text="Result" 
          FontFamily="Segoe Ui Light" 
          FontSize="28" 
          FontWeight="Light" 
          HorizontalAlignment="Center" 
          Margin="10" 
          Grid.Row="7" 
          Grid.Column="1"/> 
      </Grid> 
     </StackPanel> 
    </Grid> 

MainPage.xaml.cs Код

new Countries("Pakistan", "Pakistani Rupee", "ms-appx:///Assets/pk.png"); 
      new Countries("USA", "US Dollar", "ms-appx:///Assets/us.png"); 
      new Countries("Saudi Arabia", "Saudi Rayal", "ms-appx:///Assets/sa.png"); 
      new Countries("England", "Euro", "ms-appx:///Assets/gb.png"); 

      FromContainer.DataContext = Countries.getAllCountries(); 
      ToContainer.DataContext = Countries.getAllCountries(); 

В MainPage.xaml.cs под InitializeCompo nent() ;, Этот блок кода добавляет список стран в ListBoxes с использованием Binding.

Countries.cs Код

public static ObservableCollection<Countries> Country = new ObservableCollection<Countries>(); 

     public String Name { get; set; } 
     public String Currency { get; set; } 
     public String FlagImg { get; set; } 


     public Countries(){ 

     } 

     public Countries(String name,String currency,String Flag) 
     { 
      Countries ob = new Countries(); 
      ob.Name = name; 
      ob.Currency = currency; 
      ob.FlagImg = Flag; 

      Country.Add(ob); 
     } 

     public static ObservableCollection<Countries> getAllCountries() 
     { 


      return Country; 
     } 

Наблюдаемые Коллекция для хранения Страны Данные (Варианты на выбор).

Currency.cs Код

public object Convert(object value, Type targetType, object parameter, string language) 
     { 
      double pkr; 
      double dollar = 0.0; 
      if (double.TryParse(value.ToString(), out pkr)) 
      { 
       dollar = pkr * 0.0099; 
      } 
      return dollar; 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, string language) 
     { 
      throw new NotImplementedException(); 
     } 

Этот класс реализует интерфейс IValueConverter. Код, который уже используется в методе преобразования, является своего рода статическим методом преобразования. Я хочу изменить это, как я сказал выше.

Спасибо за ваше время. Пожалуйста, дайте мне знать, если в моем Вопросе есть что-то неправильное или отсутствует. Не отмечайте это как дублирующее, потому что есть еще одно решение, которое я уже пробовал, но это не мое требование.

+0

Я пытаюсь привлечь кого-то, кто знаком с этой темой, чтобы провести дальнейшие испытания. Цените свое терпение, потому что может быть какая-то задержка. –

+0

Большое спасибо. Я жду, чтобы кто-то помог мне. –

ответ

0

Проблема здесь в том, что, как я должен получить значение TextBox, обнаружить выбор ListItems из этих ListBoxes,

Вы можете обрабатывать их в ViewModel:

XAML:

<TextBox Text="{Binding InputText,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/> 
<ListView ItemsSource="{Binding Items}" SelectedItem="{Binding FromCountry,Mode=TwoWay}"/> 

MainPage.xaml.CS:

public class MainViewModel: INotifyPropertyChanged 
    { 
     private string inputText; 
     public string InputText 
     { 
      get { return inputText; } 
      set 
      { 
       if (inputText != value) 
       { 
        inputText = value; 
        PropertyChanged(this, new PropertyChangedEventArgs("InputText")); 
       } 
      } 
     } 
     public event PropertyChangedEventHandler PropertyChanged; 
    } 



public sealed partial class MainPage : Page 
    { 
     MainViewModel ViewModel; 

     public MainPage() 
     { 
      this.InitializeComponent(); 
      ViewModel = new Currency_Converter.MainViewModel(); 
      this.DataContext = ViewModel; 
     } 

    } 

определяют валютный курс и конвертировать?

IValueConverter не относится к ситуации. Вы можете сделать две выбранные валюты объединенными в одну и ту же валюту (например, доллар США) и сохранить их в локальной базе данных.

Кстати, я проверяю ваш код и обнаруживаю, что вы показываете валюту в соответствии с вашими предпочтениями. Вам лучше использовать global-ready formats, что позволит вам адаптировать ваше приложение позже для дополнительных культур и языков на мировом рынке.

Смежные вопросы