#wpf #validation #xaml #listview #data-binding
#wpf #проверка #xaml #просмотр списка #привязка к данным #listview
Вопрос:
У меня есть шаблон ячейки для listview, который определяется следующим образом:
<DataTemplate x:Key="editableIPAddressColTemplate">
<Grid x:Name="dtTemplateGrid">
<TextBlock Width="100" FontSize="11" Text="{Binding ElementName=txt, Path=Text, Mode=TwoWay}"
ToolTip="{Binding ElementName=txt, Path=ToolTip, Mode=OneWay}"
Style="{StaticResource GridBlockStyle}">
</TextBlock>
<TextBox x:Name="txt" FontSize="11" Width="100" Style="{StaticResource GridEditStyle}"
Validation.Error="TextBox_Error" LostFocus="txt_LostFocus" >
<Binding Path="IPAddress" Mode="TwoWay" ValidatesOnDataErrors="True"
ValidatesOnExceptions="True" NotifyOnValidationError="True">
<Binding.ValidationRules>
<local:IPAddressValidationRule>
<local:IPAddressValidationRule.Params>
<local:ValidationParameters BoundListView="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListView}}}"/>
</local:IPAddressValidationRule.Params>
</local:IPAddressValidationRule>
</Binding.ValidationRules>
</Binding>
</TextBox>
</Grid>
</DataTemplate>
IPAddressValidationRule является производным от ValidationRule и имеет свойство, называемое Params, которое имеет тип ValidationParameters. Класс ValidationParameters является производным от объекта dependency и имеет свойство, называемое BoundListView, которое имеет тип ListView.
Когда я просматриваю через отладчик, в классе IPValidationRule свойство BoundListView всегда равно null. Что я делаю не так?
Я был бы очень признателен, если кто-нибудь сможет помочь мне разобраться в этом.
Заранее большое спасибо.
Ответ №1:
У вас разрыв в дереве, правила проверки просто перемещаются как свойство привязки, вы не можете использовать ElementName
or RelativeSource
в таком отключенном месте. Проверьте окно вывода, и вы должны увидеть некоторые ошибки привязки, касающиеся этого.
Вы могли бы попробовать назвать ListView
и установить Binding.Source
с помощью x:Reference
( x:Reference
не любит циклических зависимостей, поэтому вам нужно следить за этим)