XAML переплет серебряный свет - PullRequest
2 голосов
/ 14 июня 2011

Пользовательский элемент управления определен следующим образом:

<UserControl ...
......
x:name="StartPage">

<ToggleButton  
x:Name="FullScreenToggle" 
Content="{Binding ElementName=StartPage,Path=FullScreenState,Mode=OneWay}" />

</UserControl>

в коде позади:

public String FullScreenState
{
            get;
            set;
}

Однако по какой-то причине свойство Content в ToggleButton не получает его. Есть идеи?

Ответы [ 3 ]

3 голосов
/ 14 июня 2011

Ваша привязка действительна, но вам нужно использовать обновляемое свойство, иначе представление не будет уведомлено об изменении свойства.

По сути, необходимо вызвать PropertyChanged с подробной информацией об измененном свойстве:

private string _fullScreenState;
public string FullScreenState
{
    get { return _fullScreenState; }
    set
    {
        if (_fullScreenState != value)
        {
            _fullScreenState = value;
            if (this.PropertyChanged != null)
            {
                this.PropertyChanged(this, new PropertyChangedEventArgs("FullScreenState"));
            }
        }
    }
}

Это означает, что ваш элемент управления должен реализовать INotifyPropertyChanged:

public partial class SilverlightControl1 : UserControl, INotifyPropertyChanged

и укажите обработчик события:

public event PropertyChangedEventHandler PropertyChanged;

* Как уже упоминалось tam , вы также можете использовать свойство зависимостей, если вы хотите расширить свой элемент управления для использования в других элементах управления. Лошади для курсов:)

0 голосов
/ 14 июня 2011

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

например:

    public int MyProperty
    {
        get { return (int)GetValue(MyPropertyProperty); }
        set { SetValue(MyPropertyProperty, value); }
    }

    // Using a DependencyProperty as the backing store for MyProperty.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty MyPropertyProperty =
        DependencyProperty.Register("MyProperty", typeof(int), typeof(ownerclass), new UIPropertyMetadata(0));
0 голосов
/ 14 июня 2011

Вам необходимо установить DataContext из UserControl:

DataContext="{Binding RelativeSource={RelativeSource Self}}"

Я полагаю, вам также придется удалить свойство "ElementName" из оператора привязки.Затем вы должны иметь возможность привязки к свойствам в коде позади.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...