Silverlight 3使用ValueConverter进行数据绑定:有条件地使用属性的默认值
我有一个日期选择器,如果SelectedDate为空,我想将其BorderBrush设置为SolidColorBrush(Colors.Red)。如果已经填写了日期,我只想使用默认的边界笔刷。我仍然希望能够在Blend中设置默认边界笔刷的样式,所以我不想硬编码DatePicker的默认边界笔刷。所以基本上: xaml:Silverlight 3使用ValueConverter进行数据绑定:有条件地使用属性的默认值,silverlight,data-binding,Silverlight,Data Binding,我有一个日期选择器,如果SelectedDate为空,我想将其BorderBrush设置为SolidColorBrush(Colors.Red)。如果已经填写了日期,我只想使用默认的边界笔刷。我仍然希望能够在Blend中设置默认边界笔刷的样式,所以我不想硬编码DatePicker的默认边界笔刷。所以基本上: xaml: 这是可能的吗?以下是您解决问题的方法: 1) 在应用程序启动时保存DatePicker的边界笔刷 2) 将DatePicker的BorderBrush绑定到视图模型中的公共属性(
这是可能的吗?以下是您解决问题的方法: 1) 在应用程序启动时保存DatePicker的边界笔刷 2) 将DatePicker的BorderBrush绑定到视图模型中的公共属性(或指定给页面DataContext的任何类型) 3) 实现日期采集器的SelectedDateChanged事件,根据日期采集器的SelectedDate是否为null,将默认(已保存)笔刷或红色笔刷指定给公共属性 在SomePage.xaml中:
<sdk:DatePicker Name="DatePicker"
BorderBrush="{Binding DatePickerBorderBrush, Mode=OneWay}"
SelectedDateChanged="SelectedDateChanged"
Width="120"
Height="22"/>
Silverlight的版本?这种机制已经存在,用于指示验证错误。
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 */
}
<sdk:DatePicker Name="DatePicker"
BorderBrush="{Binding DatePickerBorderBrush, Mode=OneWay}"
SelectedDateChanged="SelectedDateChanged"
Width="120"
Height="22"/>
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;
}