Как передать представление списка в качестве параметра в правило проверки шаблона ячейки - PullRequest
1 голос
/ 09 ноября 2011

У меня шаблон ячейки для просмотра списка определяется следующим образом:

<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 является производным от объекта зависимости и имеет свойство BoundListView, имеющее тип ListView.

Когда я вижу через отладчик, в стороне от класса IPValidationRule, свойство BoundListView всегда равно null.Что я делаю неправильно?

Буду очень признателен, если кто-нибудь поможет мне разобраться в этом.

Заранее большое спасибо.

1 Ответ

2 голосов
/ 09 ноября 2011

У вас есть разрыв в дереве, правила проверки просто плавают как свойство привязки, вы не можете использовать ElementName или RelativeSource в таком отключенном месте. Проверьте окно вывода, и вы должны увидеть некоторые ошибки связывания, связанные с этим.

Вы можете попробовать присвоить имя ListView и задать Binding.Source, используя x:Reference (x:Reference не любит циклические зависимости, поэтому вам нужно следить за этим)

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