और इसलिए, जैसा कि वादा किया गया था, MVVM पैटर्न का उपयोग करके WP8 प्लेटफॉर्म के लिए मैट्रिक्स एप्लिकेशन का तीसरा भाग। सबसे अधीर के लिए, आप तुरंत
जीथब से डाउनलोड कर सकते हैं, साथ ही
विंडोज फोन स्टोर से डाउनलोड करके अपने स्मार्टफोन पर इसे आजमा सकते हैं।
समर्थित स्क्रीन एक्सटेंशन HD720P (720x1280), WVGA (480x800), WXGA (768x1280)। एक छोटा सा माइनस है: 480x800 के अलावा एक एक्सटेंशन का उपयोग करते समय, आपको इंस्टॉलेशन के बाद एप्लिकेशन को पुनरारंभ करना होगा, क्योंकि मुझे यह नहीं मिला कि व्यू मॉडल लोड करने से पहले ग्रिड तत्व की ऊंचाई और चौड़ाई कैसे प्राप्त करें। और अब क्रम में।
विंडोज फोन 8: हम एप्लिकेशन बनाते हैं। मैट्रिक्स। भाग 1विंडोज फोन 8: हम एप्लिकेशन बनाते हैं। मैट्रिक्स। भाग २विंडोज फोन 8: हम एप्लिकेशन बनाते हैं। मैट्रिक्स। भाग 3. एमवीवीएम
WVGA स्क्रीन (480x800) पर पूरे आवेदन का विस्तारित दृश्य
WVGA स्क्रीन पर एप्लिकेशन की कार्यक्षमता का अवलोकन (480x800)
MVVM के बारे में
हम एमवीवीएम टेम्पलेट के साथ मानक पैनोरमा का उपयोग करते हैं। लेकिन हम सही करेंगे ताकि सब कुछ एक डीबी से बढ़े। ऐसा करने के लिए, एक फ़ोल्डर "मॉडल" और "डीबी" बनाएं। मॉडल में मॉडल की परिभाषाएं होंगी, और सुविधा के लिए डीबी में, इन मॉडलों के मूल्यों के साथ तुलना करने के लिए कक्षाएं, एक डेटाबेस बनाना, इसकी पूर्णता की जांच करना, और निश्चित रूप से डेटाटॉनटेक्स्ट विरासत में मिली कक्षा। हालाँकि, क्लास में DataContext इनहेरिट करता है, SeDataContext एक मॉडल - Model_Matrixes को कनेक्ट नहीं करता है, क्योंकि हम डेटाबेस में इसके मूल्यों को नहीं बचाएंगे। केवल मैट्रिक्स की एक ग्रिड बनाने और उसमें गिरने वाले आउटपुट को बनाने के लिए इसकी आवश्यकता है।
प्रोजेक्ट ट्री

डैडी मॉडल
- मॉडलबेस वह बेस मॉडल है जो सभी मॉडल को विरासत में मिलता है। यह केवल इंटरफेस इनोटिफाईप्रोपरेटी चेंजेड, इनोटिफाईप्रोपरेटी चेंजिंग को लागू करता है, जो कि मॉडल को एक / दो तरीके से यूआई के साथ जोड़ने की संभावना के लिए आवश्यक हैं।
ModelBaseusing System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SE_Matrix_2d_v_14.Models { public class ModelBase : INotifyPropertyChanged, INotifyPropertyChanging { #region INotifyPropertyChanged public event PropertyChangedEventHandler PropertyChanged; // Used to notify that a property changed protected void NotifyPropertyChanged(string propertyName) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } #endregion #region INotifyPropertyChanging public event PropertyChangingEventHandler PropertyChanging; // Used to notify that a property is about to change protected void NotifyPropertyChanging(string propertyName) { if (PropertyChanging != null) { PropertyChanging(this, new PropertyChangingEventArgs(propertyName)); } } #endregion } }
पुनश्च # भाग शब्द के बारे में ..... # समाप्ति।
अगर अचानक जिनके लिए यह नया है, तो मैं समझाता हूं: बस सुविधा के लिए। संपादक में विजुअल स्टूडियो में Ate, "पतन" (माइनस साइन) पर क्लिक करें, फिर हमें यह मिलता है:

- Model_Matrixes - मैट्रिक्स ग्रिड मॉडल, जिसमें प्रतीकों के साथ सभी जोड़तोड़ होंगे। यह XAML कोड के साथ "वन वे" के रूप में जुड़ा हुआ है, अर्थात, जब मॉडल मान बदलता है, तो परिवर्तन तुरंत UI में प्रदर्शित होते हैं। इसके अलावा कारणों में से एक यह SeDataContext से जुड़ा नहीं है, इसका कारण यह है कि डेटाबेस सॉलिडकोलोरब्रश के रूप में फ़ील्ड प्रकार का समर्थन नहीं करता है, और परिणामस्वरूप यह काम करने के लिए अधिक सुविधाजनक निकला। हालांकि मुझे अभी भी कन्वर्टर्स लिखना था।
Model_Matrixes using System; using System.Collections.Generic; using System.Data.Linq.Mapping; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Media; namespace SE_Matrix_2d_v_14.Models { [Table] public class Model_Matrixes : ModelBase {
- Model_Colors - रंग सेटिंग्स के लिए जिम्मेदार मॉडल।
Model_Colors using System; using System.Collections.Generic; using System.Data.Linq.Mapping; using System.Linq; using System.Runtime.Serialization; using System.Text; using System.Threading.Tasks; using System.Windows.Media; namespace SE_Matrix_2d_v_14.Models { [Table] [DataContract] public class Model_Colors : ModelBase {
- Model_SettingsSymbols - एक डिजिटल सेटिंग्स के लिए जिम्मेदार मॉडल, जैसे कि दबाए जाने पर सांपों की संख्या, सांप की लंबाई, आदि।
Model_SettingsSymbols using System; using System.Collections.Generic; using System.Data.Linq; using System.Data.Linq.Mapping; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SE_Matrix_2d_v_14.Models { [Table()] public class Model_SettingsSymbols : ModelBase {
- Module_Languages - वह भाषा जिसके लिए मैट्रिक्स के वर्ण लिए जाते हैं, के लिए जिम्मेदार मॉडल।
Module_Languages using System; using System.Collections.Generic; using System.Data.Linq.Mapping; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SE_Matrix_2d_v_14.Models { [Table] public class Module_Languages : ModelBase {
मॉडल के बारे में संक्षेप में: हम "कोड पहले" दृष्टिकोण के रूप में तालिकाओं का वर्णन करते हैं। प्रत्येक मॉडल डेटाबेस में एक तालिका है। मॉडल की प्रत्येक संपत्ति एक कॉलम है।
"सेट" संपत्ति में: NotifyPropertyChanging और NotifyPropertyChanged - मॉडल में परिवर्तनों की शुरुआत से पहले और परिवर्तनों के बाद क्रमशः होने वाली घटनाएं। आप MSDN पर अधिक पढ़ सकते हैं:
INotifyPropertyChanged और
INotifyPropertyChanging ।
डैडी "DB"
- वर्ग SeDataContext - DataContext विरासत में मिला है
SeDataContext using SE_Matrix_2d_v_14.Models; using System; using System.Collections.Generic; using System.Data.Linq; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SE_Matrix_2d_v_14.DB {
- कक्षा CheckDbExist - चेक अगर वांछित डेटाबेस मौजूद है, यदि नहीं, तो यह बनाता है, और प्रारंभिक मूल्यों के साथ तालिकाओं को भी भरता है।
CheckDbExist using SE_Matrix_2d_v_14.Models; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SE_Matrix_2d_v_14.DB { public class CheckDbExist {
आप सबसे अधिक संभावना है कि एक सवाल है कि इस वर्ग को कहां से बुलाया गया है और DBConnectionString चर लिया गया है, जिसमें डेटाबेस के लिए कनेक्शन स्ट्रिंग है। उत्तर: App.xaml.cs.
App.xaml.cs using System; using System.Collections.Generic; using System.Linq; using System.Diagnostics; using System.Resources; using System.Windows; using System.Windows.Markup; using System.Windows.Navigation; using Microsoft.Phone.Controls; using Microsoft.Phone.Shell; using SE_Matrix_2d_v_14.Resources; using SE_Matrix_2d_v_14.ViewModels; using SE_Matrix_2d_v_14.Models; using SE_Matrix_2d_v_14.DB; using System.Windows.Media; using System.Runtime.Serialization; using System.IO; using System.Text; namespace SE_Matrix_2d_v_14 { public partial class App : Application { private static MainViewModel viewModel = null;
- क्लास फिलकोलर्स - प्रारंभिक मूल्यों के साथ Model_Colors तालिका को भरता है।
FillColors using SE_Matrix_2d_v_14.Models; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SE_Matrix_2d_v_14.DB { public class FillColors {
- क्लास फिललंगुज - प्रारंभिक मूल्यों के साथ Module_Languages तालिका को भरता है।
FillLanguages using SE_Matrix_2d_v_14.Models; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SE_Matrix_2d_v_14.DB { public class FillLanguages {
- वर्ग FillSettingsSymbol - प्रारंभिक मानों के साथ Model_SettingsSymbols तालिका को भरता है।
FillSettingsSymbol using SE_Matrix_2d_v_14.Models; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SE_Matrix_2d_v_14.DB { public class FillSettingsSymbol {
अतिरिक्त पुस्तकालय
चूंकि कोई मानक रंग विकल्प नहीं है, इसलिए मुझे ColorPicker तत्व के लिए Coding4fun लाइब्रेरी का उपयोग करना पड़ा। भाषाओं की सूची के लिए मैंने विंडोज फोन टूलकिट लाइब्रेरी का उपयोग किया, जिसमें लिस्टपिकर तत्व शामिल है। दोनों NuGet के माध्यम से स्थापित करना आसान है।
MainPage.xaml
अब आवेदन और बंधन के रूप पर विचार करें।
MainPage.xaml <phone:PhoneApplicationPage xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" xmlns:Controls="clr-namespace:Coding4Fun.Toolkit.Controls;assembly=Coding4Fun.Toolkit.Controls" xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit" x:Class="SE_Matrix_2d_v_14.MainPage" mc:Ignorable="d" SupportedOrientations="Portrait" Orientation="Portrait" shell:SystemTray.IsVisible="False"> <phone:PhoneApplicationPage.Resources> <DataTemplate x:Key="Resources_SettingsSymbols"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="30"/> <RowDefinition Height="70"/> </Grid.RowDefinitions> <TextBlock Grid.Row="0" Text="{Binding NameForTranslate}" /> <TextBox x:Name="TextBox_Param_Value" Tag="{Binding ID}" InputScope="Number" Grid.Row="1" Width="300" HorizontalAlignment="Left" Text="{Binding Param_Value, Mode=TwoWay}" TextChanged="Event_TextBox_TextChanged_SettingSymbols" LostFocus="Event_TextBox_LostFocus_SettingsSymbols" /> </Grid> </DataTemplate> <DataTemplate x:Key="SettingsColor"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="25"/> <RowDefinition Height="100"/> </Grid.RowDefinitions> <TextBlock Grid.Row="0" Text="{Binding NameForTranslate}" /> <Rectangle Grid.Row="1" Fill="{Binding Value, Mode=TwoWay}" Tag="{Binding ID}" HorizontalAlignment="Left" Height="75" Margin="0,10,0,0" Stroke="Transparent" VerticalAlignment="Top" Width="420" Tap="Event_Rectangle_Tap_ChangeColor"/> </Grid> </DataTemplate> <DataTemplate x:Key="Matrix"> <TextBlock x:Uid="{Binding Matrix_Name}" Text="{Binding Matrix_Text, Mode=TwoWay}" FontSize="{Binding Matrix_FontSize}" Foreground="{Binding Matrix_Foreground}" /> </DataTemplate> <DataTemplate x:Key="ListPickerItemTemplate"> <TextBlock Text="{Binding NameForTranslate}" /> </DataTemplate> <DataTemplate x:Key="ListPickerFullItemTemplate"> <TextBlock Text="{Binding NameForTranslate}" FontSize="{StaticResource PhoneFontSizeExtraLarge}" /> </DataTemplate> </phone:PhoneApplicationPage.Resources> <phone:PhoneApplicationPage.FontFamily> <StaticResource ResourceKey="PhoneFontFamilyNormal"/> </phone:PhoneApplicationPage.FontFamily> <phone:PhoneApplicationPage.FontSize> <StaticResource ResourceKey="PhoneFontSizeNormal"/> </phone:PhoneApplicationPage.FontSize> <phone:PhoneApplicationPage.Foreground> <StaticResource ResourceKey="PhoneForegroundBrush"/> </phone:PhoneApplicationPage.Foreground> <Grid x:Name="LayoutRoot" Background="Transparent"> <phone:Panorama> <phone:Panorama.Background> <ImageBrush ImageSource="/SE_Matrix_2d_v_14;component/Assets/PanoramaBackground.png"/> </phone:Panorama.Background> <phone:PanoramaItem Header="SE "> <phone:LongListSelector Margin="0,0,0,5" ItemsSource="{Binding ItemSourceMatrix}" x:Name="LongListSelector_Matrix" Loaded="Event_LongListSelector_OnLoaded_Matrix" ItemTemplate="{StaticResource Matrix}" GridCellSize="20, 20" LayoutMode="Grid" FontSize="10" Padding="10,0,-5,0" Tap="Event_LongListSelector_Tap_StartMatrix" Background="{Binding Path=ItemSourceMatrixBackground, Mode=TwoWay}" /> </phone:PanoramaItem> <phone:PanoramaItem Header=" "> <Grid> <Grid.RowDefinitions> <RowDefinition Height="30"/> <RowDefinition Height="60"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <phone:LongListSelector Margin="0,0,-22,0" Grid.Row="2" ItemsSource="{Binding ItemSourceSettingsSymbols}" x:Name="LongListSelector_SettingsSymbols" ItemTemplate="{StaticResource Resources_SettingsSymbols}" /> <toolkit:ListPicker x:Name="sightingTypesPicker" ExpansionMode="FullScreenOnly" FullModeHeader=" " ItemsSource="{Binding ItemSourceLanguage}" FullModeItemTemplate="{StaticResource ListPickerFullItemTemplate}" ItemTemplate="{StaticResource ListPickerItemTemplate}" Grid.Row="1" HorizontalAlignment="Left" SelectedItem="{Binding Path=ItemSourceLanguageSelected, Mode=OneWay}" BorderThickness="0" Height="60" Margin="0" VerticalAlignment="Top" Width="300" SelectionChanged="Event_ListPicker_SelectionChanged" /> <TextBlock Grid.Row="0" Text=" " /> </Grid> </phone:PanoramaItem> <phone:PanoramaItem Header=" "> <Grid VerticalAlignment="Center" HorizontalAlignment="Center"> <Grid.RowDefinitions> <RowDefinition Height="60"/> <RowDefinition Height="60"/> <RowDefinition Height="60"/> </Grid.RowDefinitions> <TextBlock Grid.Row="0" Text="SE 1.0" FontSize="{StaticResource PhoneFontSizeLarge}"></TextBlock> <TextBlock Grid.Row="1" Text="se8se@hotmail.com" FontSize="{StaticResource PhoneFontSizeLarge}"></TextBlock> <TextBlock Grid.Row="2" FontSize="{StaticResource PhoneFontSizeLarge}"> SE, 2013</TextBlock> </Grid> </phone:PanoramaItem> <phone:PanoramaItem Header=" "> <Grid> <Grid.RowDefinitions> <RowDefinition Height="400"/> <RowDefinition Height="20"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <Controls:ColorPicker x:Name="ColorPicker" Grid.Row="0" Height="400" VerticalAlignment="Top"/> <phone:LongListSelector Margin="0,0,-22,0" Grid.Row="2" ItemsSource="{Binding ItemSourceSettingsColors}" x:Name="LongListSelector_SettingsColor" ItemTemplate="{StaticResource SettingsColor}" /> </Grid> </phone:PanoramaItem> </phone:Panorama> </Grid> </phone:PhoneApplicationPage>
यह कोड पृष्ठ की शुरुआत में एक चित्र बनाता है। कोई ट्रिक नहीं है, मानक XAML, लेकिन यदि आपके कोई प्रश्न हैं, तो पूछें। मुझे मदद करने में खुशी होगी।
डैडी "ViewModels"
हमें अपने आवेदन का दिल मिल गया। जिसके लिए सब कुछ शुरू किया गया था। तो, केवल दो वर्ग हैं।
- BaseViewModel वर्ग - INotifyPropertyChanged इंटरफ़ेस को लागू करता है
BaseViewModel using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SE_Matrix_2d_v_14.ViewModels { public class BaseViewModel : INotifyPropertyChanged { #region INotifyPropertyChanging Members public event PropertyChangedEventHandler PropertyChanged; protected void NotifyPropertyChanged(String propertyName) { PropertyChangedEventHandler handler = PropertyChanged; if (null != handler) { handler(this, new PropertyChangedEventArgs(propertyName)); } } #endregion } }
- Class MainViewModel - BaseViewModel को विरासत में मिला है, और सीधे सभी तर्क को लागू करता है। शायद कुछ डिज़ाइन
त्रुटियां हैं जिन्हें खुशी के साथ ठीक किया जा सकता है यदि आप उन्हें इंगित करते हैं और यह वास्तव में बेहतर होगा ।
MainViewModel using SE_Matrix_2d_v_14.DB; using SE_Matrix_2d_v_14.Helpers; using SE_Matrix_2d_v_14.Models; using SE_Matrix_2d_v_14.Resources; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Media; namespace SE_Matrix_2d_v_14.ViewModels { public class MainViewModel : BaseViewModel { private SeDataContext db; public MainViewModel(string SeDBConnectionString) { db = new SeDataContext(SeDBConnectionString); ItemSourceSettingsSymbols = new ObservableCollection<Model_SettingsSymbols>(); ItemSourceMatrix = new ObservableCollection<Model_Matrixes>(); ItemSourceSettingsColors = new ObservableCollection<Model_Colors>(); ItemSourceLanguage = new ObservableCollection<Module_Languages>(); } #region ItemSourceSettingsSymbols /// <summary> /// ViewModel. ItemSourceSettingsSymbols. /// </summary> private ObservableCollection<Model_SettingsSymbols> _itemSourceSettingsSymbols; public ObservableCollection<Model_SettingsSymbols> ItemSourceSettingsSymbols { get { return _itemSourceSettingsSymbols; } set { _itemSourceSettingsSymbols = value; NotifyPropertyChanged("ItemSourceSettingsSymbols"); } } #endregion #region ItemSourceSettingsColors /// <summary> /// ViewModel. ItemSourceSettingsColors. /// </summary> private ObservableCollection<Model_Colors> _itemSourceSettingsColors; public ObservableCollection<Model_Colors> ItemSourceSettingsColors { get { return _itemSourceSettingsColors; } set { _itemSourceSettingsColors = value; NotifyPropertyChanged("ItemSourceSettingsColors"); } } #endregion #region ItemSourceMatrix /// <summary> /// ViewModel. ItemSourceMatrix. /// </summary> private ObservableCollection<Model_Matrixes> _itemSourceMatrix; public ObservableCollection<Model_Matrixes> ItemSourceMatrix { get { return _itemSourceMatrix; } set { _itemSourceMatrix = value; NotifyPropertyChanged("ItemSourceMatrix"); } } #endregion #region ItemSourceMatrixBackground /// <summary> /// ViewModel. ItemSourceMatrixBackground. /// </summary> public SolidColorBrush _itemSourceMatrixBackground; public SolidColorBrush ItemSourceMatrixBackground { get{return _itemSourceMatrixBackground;} set { _itemSourceMatrixBackground = value; NotifyPropertyChanged("ItemSourceMatrixBackground"); } } #endregion #region ItemSourceLanguage /// <summary> /// ViewModel. ItemSourceMatrixBackground. /// </summary> private ObservableCollection<Module_Languages> _itemSourceLanguage; public ObservableCollection<Module_Languages> ItemSourceLanguage { get { return _itemSourceLanguage; } set { _itemSourceLanguage = value; NotifyPropertyChanged("ItemSourceLanguage"); } } #endregion #region ItemSourceLanguageSelected /// <summary> /// ViewModel. ItemSourceMatrixBackground. /// </summary> private Module_Languages _itemSourceLanguageSelected; public Module_Languages ItemSourceLanguageSelected { get { return _itemSourceLanguageSelected; } set { _itemSourceLanguageSelected = value; NotifyPropertyChanged("ItemSourceLanguageSelected"); } } #endregion /// <summary> /// ViewModel. /// </summary> public void SaveChangesToDB() { db.SubmitChanges(); } public bool IsDataLoaded { get; private set; } int coef = 20; /// <summary> /// ViewModel. ViewModel . /// </summary> public void LoadData() { // Model_SettingsSymbols IQueryable<Model_SettingsSymbols> InDB_SettingsSymbol = (from Model_SettingsSymbols todo in db.DB_SettingsSymbol select todo); Param_WindowWidth = InDB_SettingsSymbol.Where(x => x.Param_Name == "Param_WindowWidth").FirstOrDefault().Param_Value; Param_WindowHeight = InDB_SettingsSymbol.Where(x => x.Param_Name == "Param_WindowHeight").FirstOrDefault().Param_Value; rowsNumber = (int)Math.Round(Param_WindowHeight / (decimal)coef, MidpointRounding.AwayFromZero); columnsNumber = (int)Math.Round(Param_WindowWidth / (decimal)coef, MidpointRounding.AwayFromZero) - 1; // ItemSourceSettingsSymbols, , _itemSourceSettingsSymbols = new SE_FillOC().FillSettingsSymbols(InDB_SettingsSymbol.Where(x => x.Param_Name != "Param_WindowWidth" && x.Param_Name != "Param_WindowHeight")); // , _itemSourceMatrix = new SE_FillOC().FillMatrixes(rowsNumber, columnsNumber); // Model_Colors IQueryable<Model_Colors> InDB_Colors = (from Model_Colors todo in db.DB_Color select todo); // ItemSourceSettingsColors, _itemSourceSettingsColors = new SE_FillOC().FillColors(InDB_Colors); // Module_Languages IQueryable<Module_Languages> InDB_Languages = (from Module_Languages todo in db.DB_Language select todo); // ItemSourceLanguage, _itemSourceLanguage = new SE_FillOC().FillLanguages(InDB_Languages); // ItemSourceMatrixBackground = SE_Colors.StringToBrush(ItemSourceSettingsColors.Where(x => x.Name == "Param_Color_Background").SingleOrDefault().Value); // ItemSourceLanguageSelected = ItemSourceLanguage.Where(z => z.Selected == true).SingleOrDefault(); LanguageFrom = ItemSourceLanguage.Where(z => z.Selected == true).SingleOrDefault().ValueFrom; LanguageTo = ItemSourceLanguage.Where(z => z.Selected == true).SingleOrDefault().ValueTo; this.IsDataLoaded = true; } #region UpdateSettingsSymbolsByID /// <summary> /// ViewModel. Model_SettingsSymbols ID /// </summary> public void UpdateSettingsSymbolsByID(Model_SettingsSymbols SettingsSymbolsForDelete) { var query = (from Model_SettingsSymbols todo in db.DB_SettingsSymbol where todo.ID == SettingsSymbolsForDelete.ID select todo).First(); query.Param_Value = SettingsSymbolsForDelete.Param_Value; db.SubmitChanges(); ItemSourceSettingsSymbols.Where(v => v.ID == SettingsSymbolsForDelete.ID).SingleOrDefault().Param_Value = SettingsSymbolsForDelete.Param_Value; } #endregion #region UpdateSettingsSymbolsByName /// <summary> /// ViewModel. Model_SettingsSymbols /// </summary> public void UpdateSettingsSymbolsByName(Model_SettingsSymbols SettingsSymbolsForDelete) { var query = (from Model_SettingsSymbols todo in db.DB_SettingsSymbol where todo.Param_Name == SettingsSymbolsForDelete.Param_Name select todo).SingleOrDefault(); query.Param_Value = SettingsSymbolsForDelete.Param_Value; db.SubmitChanges(); } #endregion #region UpdateSettingsColorByID /// <summary> /// ViewModel. Model_Colors ID /// </summary> public void UpdateSettingsColorByID(Model_Colors SettingsSymbolsForDelete) { var query = (from Model_Colors todo in db.DB_Color where todo.ID == SettingsSymbolsForDelete.ID select todo).First(); query.Value = SettingsSymbolsForDelete.Value; db.SubmitChanges(); ItemSourceSettingsColors.Where(v => v.ID == SettingsSymbolsForDelete.ID).SingleOrDefault().Value = SettingsSymbolsForDelete.Value; // , Background View ItemSourceMatrixBackground = SE_Colors.StringToBrush(ItemSourceSettingsColors.Where(x => x.Name == "Param_Color_Background").SingleOrDefault().Value); } #endregion #region UpdateSelectedLanguageByID /// <summary> /// ViewModel. Module_Languages ID /// </summary> public void UpdateSettingsColorByID(Module_Languages forUpdate) { var query = (from Module_Languages todo in db.DB_Language where todo.Selected == true select todo).SingleOrDefault(); query.Selected = false; db.SubmitChanges(); var query1 = (from Module_Languages todo in db.DB_Language where todo.ID == forUpdate.ID select todo).SingleOrDefault(); query1.Selected = true; db.SubmitChanges(); // ItemSourceLanguage.Where(c => c.Selected == true).SingleOrDefault().Selected = false; ItemSourceLanguage.Where(c => c.ID == forUpdate.ID).SingleOrDefault().Selected = true; ItemSourceLanguageSelected = ItemSourceLanguage.Where(z => z.Selected == true).SingleOrDefault(); LanguageFrom = ItemSourceLanguage.Where(z => z.Selected == true).SingleOrDefault().ValueFrom; LanguageTo = ItemSourceLanguage.Where(z => z.Selected == true).SingleOrDefault().ValueTo; } #endregion #region Class params public SolidColorBrush TheColorOfFirstSymbol { get; set; } public SolidColorBrush TheColorOfBackground { get; set; } public SolidColorBrush TheColorOfGradientFromBrush { get; set; } public SolidColorBrush TheColorOfGradientToBrush { get; set; } public Dictionary<string, int> TheColorOfGradientFromDictionary { get; set; } public Dictionary<string, int> TheColorOfGradientToDictionary { get; set; } int Param_Iteration { get; set; } int Param_MinLength { get; set; } int Param_MaxLength { get; set; } int Param_SpeedTo { get; set; } int rowsNumber { get; set; } int columnsNumber { get; set; } int Param_WindowWidth { get; set; } int Param_WindowHeight { get; set; } int Param_FontSize { get; set; } int LanguageFrom { get; set; } int LanguageTo { get; set; } Random random = new Random(); SE_Colors SE_Colors = new SE_Colors(); #endregion /// <summary> /// /// </summary> public void Start() { for (int i = 0; i < ItemSourceSettingsSymbols.Where(v => v.Param_Name == "Param_CountSimultaneously").SingleOrDefault().Param_Value; i++ ) { MoveMatrix(); } } /// <summary> /// ViewModel. Matrix. . /// /// </summary> public async Task MoveMatrix() { Param_Iteration = ItemSourceSettingsSymbols.Where(v => v.Param_Name == "Param_Iteration").SingleOrDefault().Param_Value; Param_MinLength = ItemSourceSettingsSymbols.Where(v => v.Param_Name == "Param_MinLength").SingleOrDefault().Param_Value; Param_MaxLength = ItemSourceSettingsSymbols.Where(v => v.Param_Name == "Param_MaxLength").SingleOrDefault().Param_Value; Param_SpeedTo = ItemSourceSettingsSymbols.Where(v => v.Param_Name == "Param_SpeedTo").SingleOrDefault().Param_Value; Param_FontSize = ItemSourceSettingsSymbols.Where(v => v.Param_Name == "Param_FontSize").SingleOrDefault().Param_Value; TheColorOfFirstSymbol = SE_Colors.StringToBrush(ItemSourceSettingsColors.Where(z => z.Name == "Param_Color_FirstSymbol").SingleOrDefault().Value); TheColorOfBackground = SE_Colors.StringToBrush(ItemSourceSettingsColors.Where(x1 => x1.Name == "Param_Color_Background").SingleOrDefault().Value); TheColorOfGradientFromBrush = SE_Colors.StringToBrush(ItemSourceSettingsColors.Where(x2 => x2.Name == "Param_Color_GradientFrom").SingleOrDefault().Value); TheColorOfGradientToBrush = SE_Colors.StringToBrush(ItemSourceSettingsColors.Where(x3 => x3.Name == "Param_Color_GradientTo").SingleOrDefault().Value); TheColorOfGradientFromDictionary = SE_Colors.StringToDictionary(ItemSourceSettingsColors.Where(x4 => x4.Name == "Param_Color_GradientFrom").SingleOrDefault().Value); TheColorOfGradientToDictionary = SE_Colors.StringToDictionary(ItemSourceSettingsColors.Where(x5 => x5.Name == "Param_Color_GradientTo").SingleOrDefault().Value); for (int i = 0; i < Param_Iteration; i++) { // int ranX = random.Next(0, columnsNumber); // int ranY = random.Next( -Param_MaxLength , rowsNumber); // int length = random.Next(Param_MinLength, Param_MaxLength); // int time = random.Next(5, Param_SpeedTo); // await MoveMatrixElements(ranX, ranY, length, time); } } /// <summary> /// ViewModel. Matrix. /// </summary> /// <param name="x"> </param> /// <param name="y"> </param> /// <param name="length"> </param> /// <param name="time"> </param> public async Task MoveMatrixElements(int x, int y, int length, int time) { // , . Dictionary<int, Model_Matrixes> dicElem = new Dictionary<int, Model_Matrixes>(); int count = 0; int fail = 0; for (int i = 0; i < length; i++) { if ((y + i) < rowsNumber && (y + i) >= 0) { string elementNameToMove = x + "_" + (y + i); Model_Matrixes elementToMove = ItemSourceMatrix.Where(xx => xx.Matrix_Name == elementNameToMove).SingleOrDefault(); dicElem[count] = (elementToMove); await MatrixElementsChange(elementToMove, time, TheColorOfFirstSymbol); // , . , . for (int k = 0; k <= count; k++) { // , . "" Model_Matrixes previousElement = dicElem[k]; Dictionary<string, int> coefficientFromGradient = new SE_Colors().GetoefficientFromGradient(TheColorOfGradientFromDictionary, TheColorOfGradientToDictionary, count); SolidColorBrush colorSymbol = SE_Colors.GetSymbolColorForGradient(TheColorOfGradientFromDictionary, coefficientFromGradient, (i - fail - k)); Task dsvv = MatrixElementsChange(previousElement, time, colorSymbol); } count++; } else { // . fail++; } } } /// <summary> /// ViewModel. Matrix. , , /// /// /// </summary> /// <param name="element"> Model_Matrixes</param> /// <param name="timeOut">, , /// </param> /// <param name="NewColor"> </param> public async Task MatrixElementsChange(Model_Matrixes element, int timeOut, SolidColorBrush NewColor) { element.Matrix_Text = RandomActualSymbol(); element.Matrix_Foreground = NewColor; element.Matrix_FontSize = Param_FontSize; await Task.Delay(timeOut); } /// <summary> /// /// </summary> /// <returns> , </returns> public string RandomActualSymbol() { // return char.ConvertFromUtf32(this.random.Next((int)LanguageFrom, (int)LanguageTo)); } } }
, . :
ItemSourceSettingsSymbols = new ObservableCollection<Model_SettingsSymbols>(); ItemSourceMatrix = new ObservableCollection<Model_Matrixes>(); ItemSourceSettingsColors = new ObservableCollection<Model_Colors>(); ItemSourceLanguage = new ObservableCollection<Module_Languages>();
, UI (XAML).
LINQ:
Param_WindowWidth = InDB_SettingsSymbol.Where(x => x.Param_Name == "Param_WindowWidth").FirstOrDefault().Param_Value;
«SE_Colors» «SE_FillOC». «Helpers», .
, . LongListSelector, . , LayoutMode=«Grid» GridCellSize=«20, 20». GridCellSize . . , ViewModel UI. , 800*480 «» . . - ( , ) — .
ठीक है, कोड में, यह टुकड़ा इस तरह दिखता है:
#region UpdateSettingsSymbolsByName /// <summary> /// ViewModel. Model_SettingsSymbols /// </summary> public void UpdateSettingsSymbolsByName(Model_SettingsSymbols SettingsSymbolsForDelete) { var query = (from Model_SettingsSymbols todo in db.DB_SettingsSymbol where todo.Param_Name == SettingsSymbolsForDelete.Param_Name select todo).SingleOrDefault(); query.Param_Value = SettingsSymbolsForDelete.Param_Value; db.SubmitChanges(); } #endregion
और MainPage.xaml.cs में विंडो लोड इवेंट से कॉल किया गया।
डैडी "हेल्पर्स"
- वर्ग SE_Colors - सहायक, रंग एक प्रारूप से दूसरे में शामिल होता है। उदाहरण के लिए, डेटाबेस में रंग को संग्रहीत करने के लिए, आपको स्ट्रिंग का उपयोग करने की आवश्यकता है, और इसे ViewModel ऑब्जेक्ट - SolidColorBrush पर भेजने के लिए, और उस गणना की गणना करने के लिए आपको किसी एन्यूमरेटेड प्रकार / सूची / आदि का उपयोग करने की आवश्यकता है, मेरे मामले में यह डिक्शनरी है। शायद कोई उपयोगी होगा। हम देखते हैं:
SE_Colors using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Media; namespace SE_Matrix_2d_v_14.Helpers { public class SE_Colors {
- SE_FillOC क्लास फिल ऑब्जर्वेबल कलेक्शन के लिए कम है। हमें डेटाबेस से डेटा मिलता है, और फिर हमें इसे ViewModel ऑब्जेक्ट में स्थानांतरित करने की आवश्यकता होती है। प्रत्येक प्रेक्षण योग्य विधि के लिए:
SE_FillOC using SE_Matrix_2d_v_14.Models; using SE_Matrix_2d_v_14.Resources; using SE_Matrix_2d_v_14.ViewModels; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Media; namespace SE_Matrix_2d_v_14.Helpers { public class SE_FillOC {
MainPage.xaml.cs
कोई नई बात नहीं।
मूल रूप से, केवल ध्यान केंद्रित करने या खोने की घटनाएं।MainPage.xaml.cs using System; using System.Net; using System.Collections.Generic; using System.Linq; using System.Windows; using System.Windows.Controls; using System.Windows.Navigation; using Microsoft.Phone.Controls; using Microsoft.Phone.Shell; using SE_Matrix_2d_v_14.Models; using System.Windows.Shapes; using System.Diagnostics; using System.Reflection; using System.Windows.Media; namespace SE_Matrix_2d_v_14 { public partial class MainPage : PhoneApplicationPage {
निष्कर्ष
कोड की मात्रा में वृद्धि हुई है, लेकिन पठनीयता और व्यापकता बढ़ी है। इस मामले में MVVM अधिक सुविधाजनक है। हालाँकि, अनुप्रयोग प्रदर्शन (मैट्रिक्स में अधिकतम संख्या में साँप, जिस पर कोई ब्रेकिंग नहीं है) में थोड़ा कमी आई है।निम्नलिखित लेखों में, हम कुछ मामूली बग्स को ठीक करेंगे, डबल-क्लिक करके फुल-स्क्रीन मैट्रिक्स वृद्धि जोड़ेंगे, और Xamarin: Android और IOS का उपयोग करके एप्लिकेशन को अन्य प्लेटफार्मों पर स्थानांतरित करना शुरू करेंगे।पुनश्च
चूंकि आप माइनस हैं, तो कम से कम संकेत दें कि क्यों। यह दिलचस्प है!