Использование BindingGroups для отображения ошибок валидации - PullRequest
2 голосов
/ 18 ноября 2011

У меня есть следующий пользовательский интерфейс WPF: Список, связанный с коллекцией. Существует таблица данных, которая показывает конкретные данные для каждого элемента в этой коллекции. Шаблон данных использует панель стека для отображения полей, а также владеет группой привязок. Для каждого из элементов пользователь вводит информацию, и она будет подтверждена. Если это не удается, информация об ошибке отображается на панели стека. В дополнение к показу здесь ошибок, я хочу иметь возможность пометить хост ListView некоторой информацией, что есть проблема. Таким образом, я могу повлиять на остальную часть пользовательского интерфейса, основываясь на том, есть ли ошибка или нет. Если я переместу Binding Group вверх в ListView, я достигну этого. Однако я потеряю панель стека, способную отображать ошибки.

Таким образом, я хочу иметь возможность распространять информацию об ошибке (или, по крайней мере, флаг, указывающий на ошибку) от шаблона данных до хост-объекта (представление списка в моем случае). Я пытаюсь сделать это только с привязкой, чтобы мне не пришлось писать какой-либо код позади. Но я не знаю, как это сделать.

Вот небольшой фрагмент кода:

<ListView Name="LiquidDetailsList" Grid.Row="2" DataContext="{Binding BatchToExecute}" ItemsSource="{Binding LiquidDefinitionList}" IsSynchronizedWithCurrentItem="True">
    <ListView.ItemTemplate>
        <DataTemplate>
            <StackPanel Margin="0,5,0,0" Name="LiquidRecord">
                <StackPanel.BindingGroup>
                    <BindingGroup Name="LiquidValidation" NotifyOnValidationError="True" />
                </StackPanel.BindingGroup>

                <StackPanel Orientation="Horizontal" >
                    <TextBox Name="BatchLiquidLocation" Width="65" Height="25" Margin="5,5,5,5" HorizontalAlignment="Center" HorizontalContentAlignment="Center" Style="{StaticResource standardTextBoxErrorStyle}" Background="PowderBlue"  SourceUpdated="LiquidComponent_SourceUpdated" TextChanged="LiquidComponent_TextChanged">
                        <Binding BindingGroupName="LiquidValidation" Path="Location" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged" NotifyOnValidationError="True" />
                    </TextBox>

                    <TextBox Name="BatchLiquidVolume" Margin="10,5,0,5" Width="65" Height="25" HorizontalAlignment="Center" HorizontalContentAlignment="Center" Style="{StaticResource standardTextBoxErrorStyle}" Background="PowderBlue" Tag="VOLUME"  SourceUpdated="LiquidComponent_SourceUpdated" TextChanged="LiquidComponent_TextChanged">
                        <Binding BindingGroupName="LiquidValidation" Path="Volume" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged" NotifyOnValidationError="True" />
                    </TextBox>

                    <CheckBox Name="BatchLiquidReuseTip" Margin="10,5,0,5" Width="25" HorizontalAlignment="Center" HorizontalContentAlignment="Center" Background="PowderBlue" Tag="REUSETIP" VerticalAlignment="Center">
                        <CheckBox.IsChecked>
                            <Binding BindingGroupName="LiquidValidation" Path="ReuseTip" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged" NotifyOnValidationError="True" />
                        </CheckBox.IsChecked>
                    </CheckBox>

                    <Button Name="DeleteLiquidButton" Margin="10,5,5,5" Width="25" Height="25" Click="DeleteLiquidButton_Click" HorizontalAlignment="Center">X</Button>
                </StackPanel>

                <ItemsControl Margin="10,0,0,0"  ItemsSource="{Binding Path=(Validation.Errors), ElementName=LiquidRecord}"  IsTabStop="False">
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <Label Foreground="Red" Content="{Binding Path=ErrorContent}"/>
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...