Хочу разобраться как правильно передавать данные между окнами в WPF. Есть главное окно
public partial class MainWindow : Window
{
public SolidColorBrush colorme = Brushes.Yellow;
public MainWindow()
{
InitializeComponent();
}
private void MenuItem_Click(object sender, RoutedEventArgs e)
{
DialogBox dia = new DialogBox();
dia.mymain = this; <== не хотелось бы делать так
dia.ShowDialog();
// colorme = dia.my_solid;
}
}
Оно вызывает диалоговое окно в котором содержится вызов формы для выбора пользователем цвета.
public partial class DialogBox : Window
{
public MainWindow mymain;
public DialogBox()
{
InitializeComponent();
}
private void Cnange_Font_OnClick(object sender, RoutedEventArgs e)
{
ColorDialog colorfont = new ColorDialog();
colorfont.FullOpen = true;
colorfont.ShowDialog();
var line = colorfont.Color;
Color color = Color.FromRgb(line.R, line.G, line.B);
SolidColorBrush solid = new SolidColorBrush(color);
mymain.colorme = solid;
}
}
Я насколько понимаю что нежелательно в диалоговое окно передавать ссылку на MainWindow. И есть вариант это сделать через статический класс, но у меня не получается настроить уведомления для MainWindow на произведенные изменения в статическом классе.
Полный мой код. Архив
Заранее спасибо за ответ
Не утверждаю, что это самый правильный вариант (понятие "правильно" вообще очень относительно), но я бы сделал так:
public partial class MainWindow : Window
{
public SolidColorBrush ColorMe = Brushes.Yellow;
public MainWindow()
{
InitializeComponent();
}
private void MenuItem_Click(object sender, RoutedEventArgs e)
{
DialogBox dia = new DialogBox(ColorMe);
// dia.mymain = this; // <== не хотелось бы делать так
bool? diaRes = dia.ShowDialog();
if (diaRes.HasValue && diaRes.Value)
{
ColorMe = dia.SelectedColor;
}
}
}
public partial class DialogBox : Window
{
public SolidColorBrush SelectedColor { get; private set; }
public DialogBox(SolidColorBrush initialColor)
{
SelectedColor = initialColor.Clone();
InitializeComponent();
}
private void Cnange_Font_OnClick(object sender, RoutedEventArgs e)
{
using (ColorDialog colorDia = new ColorDialog())
{
colorDia.Color
= System.Drawing.Color.FromArgb
(SelectedColor.Color.A,
SelectedColor.Color.R,
SelectedColor.Color.G,
SelectedColor.Color.B);
colorDia.FullOpen = true;
DialogResult res = colorDia.ShowDialog();
if (res == System.Windows.Forms.DialogResult.OK)
{
System.Drawing.Color line = colorDia.Color;
Color color = Color.FromRgb(line.R, line.G, line.B);
SelectedColor = new SolidColorBrush(color);
}
}
}
}
Здесь возможны вариации. Но общий принцип, думаю, понятен. Во вспомогательный диалог передаётся цвет для начального значения, сохраняется внутри в свойстве. После успешного закрытия диалога (не нажата кнопка "отмена", например) считывается новый цвет из этого же свойства.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть какое-то большоеNet приложение-служба, которая делает очень много повторяющихся вычислений, вычисления объемные, но не суть важно
То, что у меня получилось, сортирует элементы массива в строкахМне нужно, чтобы сортировались все элементы массива
пытаюсь загрузить images в бд или на сервер , но не получаетсяможет кто нибудь поможет мне