1 / 1 / 4
Регистрация: 20.10.2012
Сообщений: 130
1

Как получить доступ к переменной из другого класса

03.11.2012, 23:41. Показов 17650. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
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
namespace ViewModel
{
public class AFViewModel : ViewModelBase
{
 private int _SecPauseDel = 0;
        public int SecPauseDel
        {
            get { return _SecPauseDel; }
            set { _SecPauseDel = value; }
        }
 
 
}
 
 public class AgeToColorConverter : System.Windows.DependencyObject, IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            // Все проверки для краткости выкинул
            return (int)value <= SecPauseDel ?  /// ?????? Нет доступа
                new SolidColorBrush(Colors.OrangeRed)
                : new SolidColorBrush(Colors.White);
        }
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new Exception("The method or operation is not implemented.");
        }
    }
 
 
 
}
Не знаю как получить доступ из класса конвертера к переменных другого класса.

Добавлено через 6 минут
Конвертер используется в XAML. XAML данные получает через биндинг. Может как-то можно связать через него?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.11.2012, 23:41
Ответы с готовыми решениями:

Как получить доступ к изменению переменной из другого класса?
Это наверное клупый вопрос, но я не могу его решить! создал таблицу с тремя элементами в основе...

Как получить доступ к переменной находящейся в одном методе из другого метода в пределах одного класса
Привет всем! Очередной вопрос новичка, допустим, у меня есть метод 1, в котором назначена...

Как получить доступ к переменной из другого метода с++
Хочу чтоб вводились дни по месяцам, например если февраль то не может быть в месяце 30 дней. Сделал...

Как получить доступ к объекту другого класса
Здравствуйте друзья. Прошу помощи по вопросу В главном viewController cоздаю объект Label и...

19
17 / 17 / 0
Регистрация: 12.08.2012
Сообщений: 98
Записей в блоге: 1
03.11.2012, 23:59 2
если я правильно понял Может создать экземпляр класса AFViewModel
и обращаться через точку
C#
1
2
AFViewModel Name = new AFViewModel();
Name.SecPauseDel;
1
47 / 47 / 13
Регистрация: 05.05.2012
Сообщений: 178
03.11.2012, 23:59 3
Вы имеет в виду это?
Миниатюры
Как получить доступ к переменной из другого класса  
0
1 / 1 / 4
Регистрация: 20.10.2012
Сообщений: 130
04.11.2012, 00:20  [ТС] 4
C#
1
AFViewModel Name = new AFViewModel();
создается в файле View.xaml.cs
там происходит инициализация окна и создается свой AFViewModel и вот доступ нужен именно к своему экземпляру, а не создавать новый.

Main как таковой в программе нет. Сам конвертер создается в Xaml строкой:
XML
1
<Proekt_ViewModel:AgeToColorConverter x:Key="AgeToColorConverter" />
Добавлено через 4 минуты
Вы предлагаете заменить инициализацию в Xaml, на инициализацию в С# и добавить в функцию
Convert новые параметры?
Мне бы пример т к тип функции object незнаком и может быть количество аргументов строго фиксированно.

Добавлено через 2 минуты
там имя реализованно через x:Key. Надо же как-то имя включить также в это пространство чтобы в xaml стили могли использовать конвертер?
0
17 / 17 / 0
Регистрация: 12.08.2012
Сообщений: 98
Записей в блоге: 1
04.11.2012, 00:20 5
Цитата Сообщение от eugene7711 Посмотреть сообщение
создается в файле View.xaml.cs
я сам не совсем компетентен в этом вопросе


то с чем я сталкивался видимо было проще.
поля предавались между 2 окнами в разных классах
C#
1
2
WCompouse form = new WCompouse(Wcompouse);
            form.ShowDialog();

Передать ссылку на экземпляр в конструктор класса

C#
1
 public WCompouse(DataFromWCompouse data)
2
1 / 1 / 4
Регистрация: 20.10.2012
Сообщений: 130
04.11.2012, 00:27  [ТС] 6
А уточнить не можете, я в ссылках плохо понимаю>
C#
1
 Model = new AFViewModel();
Это в конструкторе класса, который инициализирует окно.
0
17 / 17 / 0
Регистрация: 12.08.2012
Сообщений: 98
Записей в блоге: 1
04.11.2012, 00:41 7
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
public class AFViewModel 
{
 private int _SecPauseDel = 0;
        public int SecPauseDel
        {
            get { return _SecPauseDel; }
            set { _SecPauseDel = value; }
        }
 
 
}
 
 public class AgeToColorConverter : System.Windows.DependencyObject, IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            AFViewModel Name = new AFViewModel();
            // Все проверки для краткости выкинул
            return (int)value <= Name.SecPauseDel ?  /// не ругается
                new SolidColorBrush(Colors.OrangeRed)
                : new SolidColorBrush(Colors.White);
        }
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new Exception("The method or operation is not implemented.");
        }
    }
    }
}
у вас может на тип ругаться...

Добавлено через 6 минут
Сори забыл... сейчас попробую сделать другой
Цитата Сообщение от eugene7711 Посмотреть сообщение
там происходит инициализация окна и создается свой AFViewModel и вот доступ нужен именно к своему экземпляру, а не создавать новый.
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
04.11.2012, 00:42 8
I-John, создайте поле класса типа
C#
1
private MainForm main = new MainForm();
И вместо
C#
1
Application.Run(new MainForm());
передавайте
C#
1
Application.Run(main);
0
17 / 17 / 0
Регистрация: 12.08.2012
Сообщений: 98
Записей в блоге: 1
04.11.2012, 00:55 9
eugene7711, Может чем то поможет...
Форма из которой передается инфа
C#
1
2
3
4
public WCompouse(DataFromWCompouse data)// в нее записывается инфа с другой формы()
        {
            
        }
форма в которую посылаются данные
C#
1
2
WCompouse NewForm = new WCompouse(Name);//wcompouse - имя формы
            form.ShowDialog();
Добавлено через 7 минут
DataFromWCompouse название (он же тип экземпляра) моего класса
0
1 / 1 / 4
Регистрация: 20.10.2012
Сообщений: 130
04.11.2012, 00:58  [ТС] 10
У меня запуск окон идет через:
InitializeComponent();
Запускаеся основное окно, потом уже запускается окно View. Слишком далеко идти получается для работы с локальными конвертерами.
---------------------
"у вас может на тип ругаться..." так безусловно получится, только все расчеты в другом экземпляре Model.
Т к у меня идет частичное объявление класса в C#, а частично в Xaml, то удобнее было бы чтобы конвертеры были в том же классе. А так новый класс и его нужно увязать с экземплярами View и Model, созданными сразу при инициализации окна View. Вот сразу бы инициализировать и класс конвертера, а внем сделать метод, который можно было бы вызвать и передать значение. Но Xaml не заставишь же работать с созданным экземпляром класса?
0
17 / 17 / 0
Регистрация: 12.08.2012
Сообщений: 98
Записей в блоге: 1
04.11.2012, 01:03 11
eugene7711, мне кажется что описанный мною способ в 9 посте в точности описывает ваши потребности так как
классы ссылочный тип данных
при передачи ссылок в конструкторы вы указываете тип
1
1 / 1 / 4
Регистрация: 20.10.2012
Сообщений: 130
04.11.2012, 01:07  [ТС] 12
C#
1
2
3
public  IdToColorConverter  IdToColorConvert;
// далее в конструкторе
 IdToColorConvert = new IdToColorConverter();
Теперь надо в Xaml переписать строчку:
<Proekt_View: IdToColorConvert x:Key="IdToColorConverter" />

Чтобы и новй Key был создан???
0
17 / 17 / 0
Регистрация: 12.08.2012
Сообщений: 98
Записей в блоге: 1
04.11.2012, 01:11 13
А что конкретно вы хотите сделать с помощью программы?
1
1 / 1 / 4
Регистрация: 20.10.2012
Сообщений: 130
04.11.2012, 01:22  [ТС] 14
Я не из Form работаю c окнами, а через Xaml.(В Blend 4 окна создаются) И конвертер вызывается из уже открытого окна т е если бы я к Textbox Window мог привязать данные в конвертер, то меня это вполне устроило.
Я меняю цвета ячеек DataGrid в зависимости от значений и уровни по изменению цвета хотел бы задавать не только в коде.

Добавлено через 4 минуты
Конечно можно через тектсовый файл обмен произвести данными)))

Добавлено через 5 минут
можно содать переменную флаг, принимающую значение bool, и условие будет в теле программы любое, но придется на вводить невидимые столбцы биндить конвертер к ним, а стиль менять в других ячейках))
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
04.11.2012, 01:28 15
eugene7711, какая разница? Последние 3 строчки:
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
#pragma checksum "..\..\App.xaml" "{406ea660-64cf-4c82-b6f0-42d48172a799}" "E6103672E1845DF294DE24DF33C6F4D5"
//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:4.0.30319.17929
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
 
using System;
using System.Diagnostics;
using System.Windows;
using System.Windows.Automation;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Markup;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Media.Effects;
using System.Windows.Media.Imaging;
using System.Windows.Media.Media3D;
using System.Windows.Media.TextFormatting;
using System.Windows.Navigation;
using System.Windows.Shapes;
 
 
namespace Millioner {
    
    
    /// <summary>
    /// App
    /// </summary>
    public partial class App : System.Windows.Application {
        
        private bool _contentLoaded;
        
        /// <summary>
        /// InitializeComponent
        /// </summary>
        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
        public void InitializeComponent() {
            if (_contentLoaded) {
                return;
            }
            _contentLoaded = true;
            
            #line 4 "..\..\App.xaml"
            this.StartupUri = new System.Uri("MainWindow.xaml", System.UriKind.Relative);
            
            #line default
            #line hidden
            System.Uri resourceLocater = new System.Uri("/Millioner;component/app.xaml", System.UriKind.Relative);
            
            #line 1 "..\..\App.xaml"
            System.Windows.Application.LoadComponent(this, resourceLocater);
            
            #line default
            #line hidden
        }
        
        /// <summary>
        /// Application Entry Point.
        /// </summary>
        [System.STAThreadAttribute()]
        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
        public static void Main() {
            Millioner.App app = new Millioner.App();
            app.InitializeComponent();
            app.Run();
        }
    }
}
1
1 / 1 / 4
Регистрация: 20.10.2012
Сообщений: 130
04.11.2012, 01:41  [ТС] 16
Спасибо. Идея с оболочкой хороша. Просто через bool мне достаточно одного конвертера. Просто создается несколько стилей и каждый биндится на свою переменную. Ну и каждому столбцу задается свой стиль. Для конкретно моей программы это удобней будет. Лучше конечно прямой доступ к классу, который и создает новый экземпляр класса конвертера, но здесь приходится мириться стем, что в Xaml не так просто сделать что-то не стандартное.
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
04.11.2012, 01:59 17
eugene7711, а селектором стилей не получается воспользоваться?..
0
1 / 1 / 4
Регистрация: 20.10.2012
Сообщений: 130
04.11.2012, 02:05  [ТС] 18
Не умею. Дорабатываю функционал своей программы, написанной не мной. Я скорее не программист и изучаю только то , что позволяет реализвать потребности. Вы первый, от кого я слушу такой способ управления цветом бэкграунд ячейки. Все мне говорили о конвертере, вот и стал им заниматься. Сначало вообще через DataGrid_LoadingRow цвета строк менял.
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
04.11.2012, 08:33 19
eugene7711, ну вот например:
http://professorweb.ru/my/WPF/... 2/22_2.php
А вообще если занимаетесь WPF - обязательно нужно иметь Макдональда - там все это есть в более разжеванной форме, да еще и на бумаге)

Добавлено через 14 минут
eugene7711, вообще нужно было делать триггер и не париться с этой фигней.

Добавлено через 9 минут
А вместо своего того, чтобы мутить свой класс, то что нужно тупо записывать в Тэги, они для этого и придуманы...
0
1 / 1 / 4
Регистрация: 20.10.2012
Сообщений: 130
04.11.2012, 09:41  [ТС] 20
Изменение цвета отдельной ячейки в DataGrid

Через триггеры очень длинно получается и операции сравнения <= или >= я там не заметил.
Мне ковертер через класс нравится т к быстро все получается. 2-3 строчки в Xaml на одно условие.

Добавлено через 5 минут
<DataGridTextColumn Binding="{Binding VolumeMethod}" Header="Volume" Foreground="#FF77F38A" Width="55" FontSize="13.333" />
вот как быстро этому столбцу тригггер на значение в ячейки создать с другим цветом при VolumeSignalDC >=50? Мне пришлось добавить только: CellStyle="{StaticResource IdStyle}"
0
04.11.2012, 09:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.11.2012, 09:41
Помогаю со студенческими работами здесь

Как получить доступ к DataGridView из другого класса
Есть форма Administrator, на ней DataGridView. Есть класс Admin_Panel, как из этого класса...

Как получить доступ к методу из другого класса?
public partial class Form1 : Form { private void button1_Click(object sender,...

Как получить доступ к CardLayout из другого класса?
Здравствуйте, в общем суть вопроса такова. Есть два класса MainClass и SubClass в MainClasss...

Как получить доступ к массиву из другого класса?
Подскажите, есть такой код: switch(o_field.fieldArray) { // Код } Этот код находится в...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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