OneWayToSource
Binding кажется сломана в .NET 4.0OneWayToSource Binding кажется сломанной в .NET 4.0
У меня есть этот простой кусок Xaml
<StackPanel>
<TextBox Text="{Binding TextProperty, Mode=OneWayToSource}"/>
<Button/>
</StackPanel>
И мой код позади выглядит так
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
}
private string m_textProperty;
public string TextProperty
{
get
{
return "Should not be used in OneWayToSource Binding";
}
set
{
m_textProperty = value;
}
}
В .NET 3.5 это работает, как вы могли бы исключить. Поместите текст в TextBox
, нажмите Tab, чтобы сделать его потерять фокус, и TextProperty
обновления с любым текстом, который был введен в TextBox
В .NET 4.0, если ввести текст в TextBox
, а затем нажмите Tab, чтобы потерять Focus, TextBox
возвращается к значению для TextProperty
(что означает «Нельзя использовать в привязке OneWayToSource»). Это перечитывание предназначено для привязки OneWayToSource
в .NET 4.0? Я просто хочу, чтобы TextBox
нажал его значение на TextProperty
, а не наоборот.
Update
Добавление Bounty на этот вопрос, как это стало мэром неудобством в моем проекте, и я хотел бы знать причину, по которой это изменилось. Кажется, что get
вызывается после того, как Binding обновил источник. Является ли это желательным поведением для привязки OneWayToSource
в .NET 4.0?
Если да
- Что была проблема с тем, как он работал в 3.5?
- В каких сценариях это новое поведение лучше?
Или это это на самом деле ошибка, что мы можем надеяться получить устранен в следующей версии?
Спасибо за ваш ответ и конвертер, но я не согласен. Его ответ и блог Карла Шиффлетта объяснили, почему эта функция была добавлена для каждого режима, кроме «OneWayToSource». Скажем, что я делаю некоторое преобразование, форматирование или что-то другое в настройщике, я все равно не хочу, чтобы мой «TextBox» обновлялся до этого значения. Они не только нарушили способ, которым это работало раньше (о котором я никогда не слышал, чтобы кто-то жаловался), он теперь тоже промахивается, потому что он больше не является «OneWayToSource». Это где-то посередине, как «TwoWay» без обновления уведомления об изменении –
Я не заметил, что я нахожу новое поведение для «OneWayToSource» удивительным и бесполезным. Я не хотел, чтобы это оправдывало это, просто признав, что я не думаю, что мы получим какую-то тягу, потому что те, кто этого хочет, вероятно, более вокальные, чем те, кто этого не делает. Поэтому обходной путь по крайней мере дает нам решение. –
Также, когда кто-нибудь когда-нибудь захочет этого поведения? Вы хотите, чтобы 'TextBox' вызывал get после того, как он был установлен из' TextBox', но не если свойство, если оно установлено из другого места? Не имеет смысла для меня .. –