#c# #wpf #mvvm #.net-4.0 #timer
#c# #wpf #mvvm #.net-4.0 #таймер
Вопрос:
Мне нужно создать приложение с двумя окнами:
Окно 1 содержит 6 таймеров обратного отсчета.
Окно 2 Здесь будут установлены настройки отдельных таймеров.
Что будет лучшим решением для этой функциональности? Я буду использовать c # wpf и .Net 4.0
Комментарии:
1. что вы пробовали? это должно быть тривиально, что вас останавливает?
2. Должно быть тривиальным просто иметь две формы и создавать их экземпляры. Вы можете ссылаться на компоненты в каждой форме напрямую (если вы не используете несколько потоков), если они общедоступны.
3. @Polynomial никогда не предлагайте получать доступ к элементам управления пользовательского интерфейса одной формы из другой. Это ненадежный и рекомендуемый подход, вместо этого следует использовать свойства и OO approachc. Если вы предоставите текстовое поле Name вместо простого свойства Name, это создаст зависимость, и код больше не будет работать так же или потребует слишком много изменений, если текстовое поле будет заменено меткой, как простой пример…
4. Я использую DispatcherTimer allong с некоторыми временными интервалами и датами.
5. @DavidePiras — Для небольшого приложения это не должно быть слишком большой проблемой, но я понимаю вашу точку зрения. FireFly3000 — вам следует воспользоваться советом Давида и создать свойство, которое переносит элемент управления, к которому вы хотите получить доступ (например
public TextBox MyTextBox { get { return this.myTextBox; } set { this.myTextBox = value; } }
), или использовать метод для предоставления определенных функций.
Ответ №1:
MVVM
1. CountDownView представляет собой представление с одним таймером, простой текстовый блок, привязанный к CurrentValue
свойству, или что-то более приятное / сложное вместо текстового блока
2. CountDownViewModel представляет сам один таймер, свойство expose int CurrentValue
отображается в виде номера обратного отсчета в представлении. Для реализации обратного отсчета вы можете использовать Sytem.Таймеры.Таймер и обработчик прошедших событий просто уменьшают значение свойства currentValue
3. TimersView — для первого окна с 6 таймерами
- ItemsCountrol / ListView,
- ItemTemplate — CountDownView
- ItemsSource — привязан к
Timers
свойствуTimersViewModel
, в основном TimersViewModel должен быть установлен в DataContext TimersView, чтобы вы могли указать следующую привязку: (и каждый элемент будет привязан к одному таймеру)<ListView ItemsSource="{Binding Timers}" ... />
4. TimersViewModel — IEnumerable<CountDownViewModel> Timers
свойство expose
5. SettingsView — панель настроек
PS: INotifyPropertyChanged для всех свойств виртуальной машины, доступных для просмотра
Домашнее задание для вас:
- Разберитесь в принципах MVVM, привязках и командах WPF, это было бы полезно для вас на протяжении всей вашей карьеры
- Самостоятельно реализуйте связь между TimersViewModel и SettingsViewModel
Комментарии:
1. @FireFly3000: было бы здорово! Также я бы предложил переименовать ваш вопрос в самоописательный, а не такой обобщенный
2. Могу ли я попросить вас описать шаги 2 и 3 немного подробнее?
3. Как я буду устанавливать привязки для шага 3?