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