2014-12-08 9 views
-1

У меня есть настраиваемый элемент управления, основанный на RangeBase. В контроле я отображая отформатированную версию Value, как это:Принудительное обновление свойства из пользовательского элемента управления

<Label Content="{Binding RelativeSource={RelativeSource FindAncestor, 
     AncestorType={x:Type local:NumericUpDownControl}}, Path=FormattedValue}" /> 

FormattedValue выглядит следующим образом:

public string FormattedValue 
{ 
    get { return Value.ToString(_format); }    
} 

Все это, кажется, работает хорошо. Однако в управлении, есть кнопка, которая увеличивает значение Value:

private void myButton_Click(object sender, RoutedEventArgs e) 
{ 
    Value += 0.5;    
} 

Проблема, что у меня есть, что FormattedValue никогда не обновляется. Я предполагаю, что мне нужно что-то похожее на RaisePropertyChanged, но изнутри элемента управления. Я попытался добавить фиктивный набор в FormattedValue, но безрезультатно. Как я могу получить это значение для обновления на экране?

+1

Почему вы не имеете FormattedValue как свойство зависимостей? –

+0

Разве это не приведет к тому, что 'FormattedValue' будет доступен вне контроля? Я не хочу этого. –

+0

Кроме того, для избирателей: почему? –

ответ

0

Ваша текущая проблема в том, что вы установили свойство «Значение» Value += 0.5;, но вы привязываетесь к свойству «FormattedValue». Таким образом, вы повышаете «PropertyChanged» в Setter вашего свойства «Value» для вашего свойства «FormattedValue», и ваш код должен работать по своему желанию.

РЕДАКТИРОВАТЬ

Лучший способ затем, используя ненужное дополнительное свойство («FormattedValue»), чтобы использовать свойство ContentStringFormat этикетки ContentStringFormat Property.