Я пытаюсь привязать свойство в моем DataContext
к свойству в ValidationRule
:
public class ReleaseValidationRule : ValidationRule
{
// I want to bind a value from my DataContext to this property:
public CheckboxViewModels ValidReleases { get; set; }
...
}
Основываясь на этой теме , я создал класс CheckboxViewModels
просто для того, чтобы действовать как обертка для List<CheckboxViewModel>
, чтобы список мог быть DependencyProperty
, чтобы я мог связываться с ним. Однако в моем методе Validate
в моем ValidationRule
список ValidReleases
всегда пуст. Вот мой XAML:
<TextBox>
<TextBox.Text>
<Binding Path="Release" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<local:ReleaseValidationRule>
<local:ReleaseValidationRule.ValidReleases>
<local:CheckboxViewModels List="{Binding Path=Releases,
Converter={StaticResource debugConverter}}"/>
</local:ReleaseValidationRule.ValidReleases>
</local:ReleaseValidationRule>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
Я знаю, что свойство Releases
(то, что я связываю со свойством List
CheckboxViewModels
) имеет содержимое, потому что у меня есть TreeView
чуть выше TextBox
, который показывает содержимое Releases
, Конвертер, который у меня есть на привязке CheckboxViewModels.List
, ничего не делает, это просто место, где я могу установить точку останова. Самое смешное, что точка останова конвертера никогда не будет достигнута. Как будто вся строка <local:CheckboxViewModels List="{Binding Path=Releases, Converter={StaticResource debugConverter}}"/>
никогда не выполняется, поэтому свойство ValidReleases
в моем ValidationRule
никогда не устанавливается. Что происходит?
Редактировать: вот как выглядит CheckboxViewModels
:
public class CheckboxViewModels : DependencyObject, IList<CheckboxViewModel>,
IEnumerable<CheckboxViewModel>
{
...members necessary to implement IList, IEnumerable...
public static readonly DependencyProperty ListProperty =
DependencyProperty.Register(
"List",
typeof(List<CheckboxViewModel>),
typeof(CheckboxViewModels),
new PropertyMetadata(new List<CheckboxViewModel>())
);
public List<CheckboxViewModel> List
{
get { return (List<CheckboxViewModel>)GetValue(ListProperty); }
set { SetValue(ListProperty, value); }
}
}