Я хочу изменить значение (textBlock) в соответствии с событием. Затем я хочу обновить свое окно, но не смог. Я использовал invalidateVisual, а также решения других сообщений, но ничего не получилось.Как обновить окно в C#/WPF?
Спасибо заранее
Я хочу изменить значение (textBlock) в соответствии с событием. Затем я хочу обновить свое окно, но не смог. Я использовал invalidateVisual, а также решения других сообщений, но ничего не получилось.Как обновить окно в C#/WPF?
Спасибо заранее
Лучший подход к тому, что вы пытаетесь сделать, будет использовать связывание данных.
У вас должен быть строковый объект, который всегда будет хранить значение вашего текстового блока. Затем вам нужно связать этот объект с вашим текстовым блоком, а затем использовать событие, предоставленное интерфейсом INotifyPropertyChanged
, и каждый раз, когда значение изменит его представление (текстовый блок) изменится, нет необходимости обновлять окно.
Более подробная информация here
Это не отвечает на несуществующий вопрос. Хороший совет. – BradleyDotNET
Не могли бы вы быть более вежливыми и проявлять уважение к людям, начинающим сейчас C#/WPF? – Vasileios
@ Vasileios Не знаете, к кому вы обращались здесь; но этот пост кажется очень вежливым и почтительным. Мой комментарий был направлен на OP (и вы еще не задали вопрос, вы как-то сделали в своем комментарии, но такие детали должны быть отредактированы). Честно говоря, я не вижу, как мои комментарии были грубыми/неуважительными. Пожалуйста, дайте совет в обоих ответах, хотя. – BradleyDotNET
Если событие обновляет TextBlock и TextBlock вы используете привязан к свойства строки и свойство выдает NotifyPropertyChanged() в это набор метод, который будет вызывать дисплей для обновления, как ты желаешь.
Есть и другие способы, но это самое легкое, учитывая мое понимание вашего вопроса.
(это похоже на другой ответ, но я пытался слова так легче понять/реализации.)
несколько решений (первый и второй один не использовать привязки данных).
txtMyControl.text = "New value";
Если нет основного потока, вы можете использовать диспетчер для обновления значения.
Application.Current.Dispatcher.BeginInvoke(() => txtMyControl.text == "New Value")
Однако самый удобный способ WPF сделать это - использовать привязку данных. Любое изменение, внесенное в значение в коде, будет немедленно отражено в пользовательском интерфейсе.
XAML
<TextBox x:Name="txtExample" Text="{Binding MyTextProperty,Mode=TwoWay}" Height="24" Width="120"/>
В вашем коде, вы должны объявить переменную, которая будет упорным.
private ExampleModel _ExampleModel = new ExmampleModel();
При загрузке кода вы связываете эту переменную с контекстом данных текстового поля.
txtExample.DataContext = _ExampleModel
Тогда у вас есть класс, который будет содержать все редактируемые свойства на экране (Textboxes, радио коробки, и т.д ...)
public class ExampleModel : INotifyPropertyChanged
{
private string _MyTextProperty = "test";
public string MyTextProperty {
get { return _MyTextProperty; }
set {
if (string.Compare(_MyTextProperty, value) != 0) {
_MyTextProperty = value;
RaisePropertyChanged("MyTextProperty");
}
}
}
public void RaisePropertyChanged(string PropertyName)
{
if (PropertyChanged != null) {
PropertyChanged(this, new PropertyChangedEventArgs(PropertyName));
}
}
public event PropertyChangedEventHandler INotifyPropertyChanged.PropertyChanged;
public delegate void PropertyChangedEventHandler(object sender, PropertyChangedEventArgs e);
}
Всякий раз, когда вы регулируете ваше мероприятие, вы просто должны измените значение свойства, содержащего информацию, и пользовательский интерфейс будет соответствующим образом обновляться. Кроме того, поскольку мы используем двустороннюю привязку, значение из вашего текстового поля всегда будет таким же, как значение, содержащееся в свойстве MyTextProperty в классе ExampleModel, что очень упрощает поиск значений.
например:
_ExampleModel.MyTextProperty = "New value";
Если вы уже использовали привязки данных, убедитесь, что класс используется инвентарь INotifyPropertyChanged и что это событие PropertyChanged вызывается, когда изменение значения свойства или в противном случае он не будет обновлять пользовательский интерфейс.
Зачем вам нужно «обновлять» окно? Это требование говорит мне, что вы делаете это очень, очень, * неправильно *. Более того; как вы знаете, что он не работает? – BradleyDotNET
Я пытаюсь создать повестку дня, и я хочу показать информацию для контакта после нажатия на нее. Чтобы быть более конкретным, у меня есть в левой части окна список контактов, и когда элемент из них я покажу соответствующую информацию в правой части. – Vasileios
То есть привязка хорошо; вам не нужно 'InvalidateVisual' или подобное. – BradleyDotNET