Как считать переданный параметр в WPF UserControl?

Спасибо за ввод, я смог обойти мою проблему, создав вычисляемое поле в Quicksight на основе строки, используя parseDate (replace (substring ({date_in_ISO}, 1,19), 'T', "") , 'гггг-мм-дд чч: мм: сс')

7
задан Edward Tanguay 3 February 2009 в 16:28
поделиться

5 ответов

Ваш подход к привязке не работает, потому что Ваше свойство FirstMessage не уведомляет, когда это обновляется. Используйте Свойства Зависимости для этого. Посмотрите ниже:

public partial class GetLatest : UserControl
{
    public static readonly DependencyProperty FirstMessageProperty = DependencyProperty.Register("FirstMessage", typeof(string), typeof(GetLatest));

    public string FirstMessage
    {
        get { return (string)GetValue(FirstMessageProperty); }
        set { SetValue(FirstMessageProperty, value); }
    }

    public GetLatest()
    {
        InitializeComponent();
        this.DataContext = this;
    }

}

XAML:

<UserControl x:Class="TestUserControl.Controls.GetLatest"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <TextBlock Text="{Binding FirstMessage}" />
</UserControl>

Каждый раз, когда свойство FirstMessage изменяется, Ваш текстовый блок обновит себя.

16
ответ дан 6 December 2019 в 08:17
поделиться

FirstMessage установлен после того, как конструктора вызвали. Необходимо изменить текст от метода set FirstMessage.

При инициализации объекта от XAML сначала конструктора по умолчанию называют, затем свойства установлены на объекте.

3
ответ дан 6 December 2019 в 08:17
поделиться

Этот быстрый пример не будет использовать привязки, потому что значение не настраивается, пока Конструктора по умолчанию не называют, но здесь - как можно заставить текст обнаруживаться.

<UserControl x:Class="TestUserControl.Controls.GetLatest"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Loaded="GetLatest_Loaded">
        <TextBlock Name="theTextBlock"/>
</UserControl>

Затем просто измените свой cs файл к этому:

public partial class GetLatest : UserControl
{
    public string FirstMessage { get; set; }

    public GetLatest()
    {
        InitializeComponent();
        theTextBlock.Text = this.FirstMessage;
    }

    private void GetLatest_Loaded(object sender, RoutedEventArgs e)
    {
        theTextBlock.Text = this.FirstMessage;
    }
}

Я рекомендую работать над установкой Привязки вместо этого, поскольку это - довольно подобный спагетти код.

2
ответ дан 6 December 2019 в 08:17
поделиться

Можно также использовать:

public partial class GetLatest : UserControl
{
    private string _firstMessage;
    public string FirstMessage 
    {
        get { return _firstMessage; }
        set { _firstMessage = value; theTextBlock.Text = value; }
    }

    public GetLatest()
    {
        InitializeComponent();
    }
}
1
ответ дан 6 December 2019 в 08:17
поделиться

В случае кода Вы отправили выше его, проблема синхронизации; свойству FirstMessage не присвоили его значение, когда конструктор выполняется. Необходимо было бы выполнить тот код в событии, происходящем позже такой как Загруженный.

0
ответ дан 6 December 2019 в 08:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: