2013-10-02 3 views
0

как я могу сделать привязку, если свойство, чтобы показать это свойство из свойства, как этот случай:Binding свойства из свойства

Xaml:

<TextBox Text="{Binding log.Message}"/> ???? 

В классе определяется как DataContext, Я объявляю переменную журнала:

public Log log = new Log(); 

класс Log:

public class Log : INotifyPropertyChanged 
{ 
    public static string Message{ get { return message; } } 
    .... 
+0

Это в значительной степени, как это должно быть сделано. Вы уверены, что правильно привязали datacontext в первую очередь? –

+0

Статичность в вашей собственности не может работать. См. Мой ответ, чтобы иметь дело с различными ситуациями, если статичность предназначена, вам не нужно заботиться о текущем DataContext. – dowhilefor

ответ

4

Ваш вопрос немного неясно для меня, но я дам ему выстрелили:

Если DataContext является экземпляром класса Log, а свойство не является статическим. Чем правильное связывание будет

<TextBox Text="{Binding Message}"/> 

Оттуда вы можете легко вложить свои привязки. Например, если Log будет иметь экземпляр класса

public class Log { 
    public MessageHandler Message {get;set;} 
} 

который будет иметь свойство LocalizedMessage, было бы просто

<TextBox Text="{Binding Message.LocalizedMessage}"/> 

Если вы хотите связать со статическим свойством, что ваше имущество Сообщение в настоящее время:

<TextBox Text="{Binding Source={x:Static MyNs:Log.Message}, Path=.}"/> 
+1

Также стоит упомянуть, что для первого сценария (нестатического свойства) для работы «журнал» должен быть свойством, а не полем. Скорее всего, это причина, по которой у ФП возникают проблемы в первую очередь. –

+0

Вы направо. Я думаю, он смутил имя своей переменной как требование поместить в обязательную силу. Это, конечно, не обязательно. – dowhilefor

0

Вы не можете связывать статические свойства с XAML. Только .Net 4.5 позволяет это и даже с некоторой работой. см.: WPF 4.5 – Part 9 : binding to static properties. Вы можете найти путь туда.

Если вы не можете использовать .Net 4.5, ознакомьтесь с this SO thread для другого обходного пути.

0

Проблема с тем, что вы написали, что Message статическое свойство, так что вы не предполагают, чтобы получить от объекта журнала, но из класса Log:

<Window.Resources> <local:Log x:Key="logClass"/> </Window.Resources>

<TextBox Text="{Binding Source={StaticResource logClass}, Path=Message}"/

Смежные вопросы