Привязка данных Silverlight 3 с ValueConverter: условно используйте значение по умолчанию для свойства - PullRequest
0 голосов
/ 10 июня 2010

У меня есть DatePicker, для которого я хочу установить BorderBrush в SolidColorBrush (Colors.Red), если SelectedDate равен нулю.Если дата была заполнена, я хочу просто использовать BorderBrush по умолчанию.Я все еще хочу иметь возможность стилизовать BorderBrush по умолчанию в Blend, поэтому я не хочу жестко задавать стандартную границу кисти DatePicker.Итак, в основном:

xaml:

<controls:DatePicker BorderBrush="{Binding SelectedDate, RelativeSource={RelativeSource Self}, Converter={StaticResource BrushConverter}, Mode=OneWay}"/>

c #:

public class BrushConverter : IValueConverter {
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
            return value == null ?
                new SolidColorBrush(Colors.Red) : /* when value != null have the bound property use it's default value */
        }

возможно ли это?

1 Ответ

0 голосов
/ 10 июня 2010

Вот как вы можете обойти проблему:

1) Сохранить BorderBrush DatePicker's при запуске приложения

2) Привязать BorderBrush DatePicker к общедоступному свойству в модели представления (или к любому типу, назначенному для DataContext страницы)

3) Реализуйте событие SelectedDateChanged от DatePicker, в котором вы назначаете открытую (по умолчанию) или красную кисть общедоступному свойству, в зависимости от того, является ли значение SelectedDate для DatePicker нулевым или нет.

В SomePage.xaml:

        <sdk:DatePicker Name="DatePicker"
                    BorderBrush="{Binding DatePickerBorderBrush, Mode=OneWay}"
                    SelectedDateChanged="SelectedDateChanged"
                    Width="120"
                    Height="22"/>

В SomePage.xaml.cs:

public partial class SomePage : UserControl, INotifyPropertyChanged
{
    Brush defaultDatePickerBrush;

    public Brush DatePickerBorderBrush
    {
        get
        {
            return (_DatePickerBorderBrush);
        }
        set
        {
            _DatePickerBorderBrush = value;
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs("DatePickerBorderBrush"));
            }
        }
    }
    Brush _DatePickerBorderBrush;

    public MainPage()
    {
        InitializeComponent();
        defaultDatePickerBrush = DatePicker.BorderBrush;
        DatePickerBorderBrush = new SolidColorBrush(Colors.Red);
        DataContext = this;
    }

    private void SelectedDateChanged(object sender, SelectionChangedEventArgs e)
    {
        if (DatePicker.SelectedDate == null)
            DatePickerBorderBrush = new SolidColorBrush(Colors.Red);
        else
            DatePickerBorderBrush = defaultDatePickerBrush;
    }

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