Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > Как привязаться к статическому полю класса


Автор: ДобренькийПапаша 5.8.2011, 10:23
Надо привязать свойство IsChecked элемента ComboBox к статическому полю статического класса, который находится в сторонней сборке.
Какой синтаксис в таком случае?

Автор: SergeyLoginov 5.8.2011, 10:53
Для привязки нужен источник привязки. Насколько я знаю, к статическому свойству привязку делать нельзя. Если ошибаюсь, буду признателен, если кто-то опровергнет примером кода.
Можно только присвоить значение:
Код

<CheckBox IsChecked="{x:Static local:MyClass.StaticProperty}"/>

Лично я при необходимости привязки к статическому свойству делаю примерно следующее:
Код

public class MyClass
    {
        private static StaticInfo staticInfo;

        public static StaticInfo StaticInfo
        {
            get 
            {
                if (staticInfo == null)
                {
                    staticInfo = new StaticInfo();
                }
                return staticInfo; 
            }            
        }
    }
    public class StaticInfo : System.ComponentModel.INotifyPropertyChanged
    {
        private bool booleanProperty;
        /// <summary>
        /// Свойство для IsChecked
        /// </summary>
        public bool BooleanProperty
        {
            get { return booleanProperty; }
            set 
            {
                if (booleanProperty != value)
                {
                    booleanProperty = value;
                    OnPropertyChanged("BooleanProperty");
                }
            }
        }
        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
        private void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
            }
        }
    }


Код

<CheckBox IsChecked="{Binding BooleanProperty, Source={x:Static local:MyClass.StaticInfo}}"/>


К сожалению, если ты имеешь дело со сторонней разработкой, то придется что-то наворачивать дополнительно. Можно просто в свойстве BooleanProperty возвращать и присваивать значение того самого статического свойства. В принципе, работать будет. Красоты, правда, маловато.

Добавлено через 1 минуту и 25 секунд
К полю, кстати, привязаться в принципе нельзя. Привязаться можно только к публичному свойству.

Автор: ДобренькийПапаша 5.8.2011, 13:23
Цитата(SergeyLoginov @  5.8.2011,  10:53 Найти цитируемый пост)
К полю, кстати, привязаться в принципе нельзя. Привязаться можно только к публичному свойству. 

Фу, оговорился. Это разумеется.
Да, к сожалению, реализовать интерфейс не смогу. Ладно, буду думать. Всё равно спасибо за помощь.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)