Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 1
Регистрация: 28.12.2016
Сообщений: 18
1

Передача параметров при навигации xaml

28.12.2016, 14:28. Показов 621. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день! Начинаю изучать c#, сказали, что лучшее обучение в практике, вот и практикуюсь Изучал SQLite, столкнулся с такой проблемой: не удаётся передать параметры из фрейма в фрейм (xaml). Код следующий:

Главная страница
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
namespace SQLiteApp
{
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
 
            this.NavigationCacheMode = NavigationCacheMode.Required;
        }
 
        protected override void OnNavigatedTo(NavigationEventArgs m)
        {
            Base _base = new Base();
            name_Block.Text = _base.Name; //name_Block - поле TextBlock на xaml
            BasePWD.Password = _base.PWD.ToString(); //BasePWD - поле PasswordBox на xaml
        }
 
        private void btnChooseDB(object sender, RoutedEventArgs e)
        {
            Frame.Navigate(typeof(SQLiteDataBase));
        }
    }
}
Страница с методами и классом Base
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
namespace SQLiteApp
{
    public class Base
    {
        public long Id { get; set; }
        public string Name { get; set;}
        public string DataBase { get; set; }
        public string PWD { get; set; }
    }
 
    public sealed partial class SQLiteDataBase : Page
    {
        public SQLiteDataBase()
        {
            this.InitializeComponent();
        }
 
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            basesList.ItemsSource = App.repo.GetBases();
        }
        private void ItemView_ItemClick(object sender, ItemClickEventArgs e)
        {
            var itemId = ((Base)e.ClickedItem).Id;
            Frame.Navigate(typeof(DetailsPage), itemId);
        }
        private void createButton_Click(object sender, RoutedEventArgs e)
        {
            Frame.Navigate(typeof(AddPage));
        }
 
        private void btn_click_back(object sender, RoutedEventArgs e)
        {
            Frame.Navigate(typeof(MainPage));
        }
    }
    public class BaseRepository
    {
        public SQLiteConnection con;
        public BaseRepository(string dbname)
        {
            this.con = new SQLiteConnection(dbname);
        }
        public void CreateTable()
        {
            string sql = "CREATE TABLE IF NOT EXISTS Base (Id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, Name VARCHAR(100), DataBase VARCHAR(100), PWD VARCHAR(100))";
            using (var statement = con.Prepare(sql))
            {
                statement.Step();
            }
        }
 
        public void Insert(Base basesql)
        {
            using (var statement = con.Prepare("INSERT INTO Base(Name, DataBase, PWD) VALUES (?,?,?)"))
            {
                statement.Bind(1, basesql.Name);
                statement.Bind(2, basesql.DataBase);
                statement.Bind(3, basesql.PWD);
                statement.Step();
            }
        }
 
        public ObservableCollection<Base> GetBases()
        {
            ObservableCollection<Base> bases = new ObservableCollection<Base>();
 
            using (var statement = con.Prepare("SELECT Id, Name, DataBase, PWD FROM Base"))
            {
                while (statement.Step() == SQLiteResult.ROW)
                {
                    Base basesql = new Base();
                    basesql.Id = (long)statement[0];
                    basesql.Name = (string)statement[1];
                    basesql.DataBase = (string)statement[2];
                    basesql.PWD = (string)statement[3];
                    bases.Add(basesql);
                }
            }
            return bases;
        }
 
        public Base GetBase(long id)
        {
            Base basesql = null;
 
            using (var statement = con.Prepare("SELECT Id, Name, DataBase, PWD FROM Base WHERE Id=?"))
            {
                statement.Bind(1, id);
                if (statement.Step() == SQLiteResult.ROW)
                {
                    basesql = new Base();
                    basesql.Id = (long)statement[0];
                    basesql.Name = (string)statement[1];
                    basesql.DataBase = (string)statement[2];
                    basesql.PWD = (string)statement[3];
                }
            }
 
            return basesql;
        }
 
        public void Update(Base basesql)
        {
            using (var statement = con.Prepare("UPDATE Base SET Name=?, DataBase=?, PWD=? WHERE Id=?"))
            {
                statement.Bind(1, basesql.Name);
                statement.Bind(2, basesql.DataBase);
                statement.Bind(3, basesql.PWD);
                statement.Bind(4, basesql.Id);
                statement.Step();
            }
        }
 
        public void Delete(long id)
        {
            using (var statement = con.Prepare("DELETE FROM Base WHERE Id=?"))
            {
                statement.Bind(1, id);
                statement.Step();
            }
        }
    }
}
Код страницы, откуда хочу передать данные
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
namespace SQLiteApp
{
    sealed partial class DetailsPage : Page
    {
        public DetailsPage()
        {
            this.InitializeComponent();
        }
        public long Id { get; set; }
        
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            if (e.Parameter != null)
        {
        long id = (long)e.Parameter;
        Base b = App.repo.GetBase(id);
        if(b!=null)
        {
            nameBlock.Text = b.Name;
            DataBaseBlock.Text = b.DataBase;
            PWDBlock.Text = b.PWD.ToString();
            deleteButton.IsEnabled = true;
            Choose_DB.IsEnabled = true;
            Id = id;
        }
        }
        }
private void Button_Click(object sender, RoutedEventArgs e)
{
    Button button = (Button)sender;
    if(button.Name=="deleteButton")
        App.repo.Delete(Id);
    if (Frame.CanGoBack)
        Frame.GoBack();
}
 
    private void btn_choose_DB(object sender, RoutedEventArgs m)
        {
        Frame.Navigate(typeof(MainPage));
        }
    }
}
Когда запускаю проверить работоспособность, выводит исключение на главной странице в строке "name_Block.Text = _base.Name;", само исключение : "Value cannot be null". Пробовал исправить через try-catch, пробовал подставлять данные в {get;set;}, всё без толку. Хотел сам разобраться, уверен, что что-то здесь очень простое, но уже 3ю неделю не могу понять что...
Если про что забыл упомянуть, готов ответить на вопросы Заранее спасибо, если направите на правильный путь. Если нужно, могу скинуть файлы всей программы в архиве.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.12.2016, 14:28
Ответы с готовыми решениями:

Передача обьекта xaml в другой обьект xaml
есть главное окно xaml &lt;Window x:Class=&quot;test.MainWindow&quot; ...

Передача параметров при редиректе
Привет всем. У меня пара вопросов: 1. Как передать параметры странице при...

Передача параметров в программу при её запуске
Как передать параметры в программу при её запуске (например через консоль), и как эти параметры...

Передача параметров при запуске потока
Подскажите почему нельзя опустить скобки при вызове анонимного метода при создании потока? new...

0
28.12.2016, 14:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.12.2016, 14:28
Помогаю со студенческими работами здесь

Передача параметров при запуске приложения
Доброго времени суток.. Как передать при запуске программы параметр: имеется пункт в контекстном...

Передача параметров из макроса в форму при её вызове
здравствуйте, как это делается? спасибо

Передача параметров на другую страницу при клике
есть динамическая таблица (всмысле из базы) в одном столбике &lt;input type='button' name ='dd'...

Передача параметров с указателями при написании функций
Помогите, напишите программу: Передача параметров с помощью указателей при написании функций....

Передача параметров указателями при написании функций
Как написать вот такую программу : Вычислить и запомнить суммы положительных элементов каждой...

Передача параметров для при обновлении страницы
Привет всем. Вопрос такой: Есть форма, на форме тэг select. Когда пользователь выбирает значение...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru