Рейтинг:
12
Matt T Heffron
Hello
находиться как private
и поле.
Любой из них разорвет связь.
Это должно быть ... public
(или internal
) собственность.
Попробуй:
public partial class MainWindow : Window
{
private const string HelloMessage = "Hello World";
public string Hello { get { return HelloMessage; } }
public MainWindow()
{
}
}
=============
Редактирование: июня - 29 апреля 2016 года
Отображение привязки к свойству таким образом, чтобы метка могла обновляться при изменениях:
код XAML:
<Window>
<Label Content="{Binding Path=Hello}"/>
</Window>
С#:
using System.ComponentModel;
using System.Runtime.CompilerServices;
public partial class MainWindow : Window, INotifyPropertyChanged
{
public MainWindow()
{
InitializeComponent();
DataContext = this;
}
private string _Hello = "Select Workflow Variant:";
public string Hello
{
get { return _Hello; }
set
{
_Hello = value;
OnPropertyChanged();
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
/// <summary>
/// Raises this object's PropertyChanged event.
/// </summary>
/// <param name="propertyName">The property that has a new value.</param>
protected void OnPropertyChanged([CallerMemberName]string propertyName = null)
{
PropertyChangedEventHandler handler = this.PropertyChanged;
if (handler != null)
{
var e = new PropertyChangedEventArgs(propertyName);
handler(this, e);
}
}
#endregion
}
Теперь, если
Hello
свойство изменяется, то
Label
будет обновляться. Аналогично определите и другие настраиваемые свойства.
JONLIN
Большое вам спасибо :) это первый прогресс, который у меня был за довольно долгое время. Во всяком случае, есть ли какая-то причина, по которой я не могу получить доступ к HelloMessage напрямую, а должен получить доступ к нему через поле?
Кроме того, как я могу получить ярлык для автоматического обновления, если источник изменится? Потому что я обнаружил, что ключевое слово Const не требуется, но оно не обновляет свойство Contet, если изменяется источник.
И все же спасибо что уделили мне время :)
Matt T Heffron
Это всего лишь одно из ограничений WPF, что привязки должны быть к свойству, а не к полю (или const).
Чтобы элементы управления WPF заметили, когда свойство, к которому они привязаны, изменило значение, DataContext (в данном случае само окно) должен реализовать интерфейс INotifyPropertyChanged, а затем вызывать событие PropertyChanged всякий раз, когда изменяется значение свойства.
Смотрите мое обновленное решение выше.
Member 14810750
Привет.
Я знаю, что прошло много времени с тех пор, как вы написали это, и, возможно, все пошло вперед, но мне интересно, можете ли вы мне помочь.
У меня возникли некоторые проблемы с методом OnPropertyChanged, так как обработчик всегда возвращает null.
Есть идеи, как это исправить?
#realJSOP
Напишите это как вопрос.
Member 14810750
Уже исправлено :)