ListBox의 내용 확인이 비어 있지 않습니다.

토니 비타 빌레

내 .NET 4.0 WPF 응용 프로그램에는 ListBox. ListBox처음에 비어 있습니다. 대화 상자에는 사용자가 항목을 ListBox. MVVM을 사용하고 있으며 뷰 모델 클래스는 IDataErrorInfo. ObservableCollection받는 바인드 뷰 모델 클래스의 ListBox's ItemsSource속성입니다.

사용자가 .NET Framework에 하나 이상의 항목을 입력 할 때까지 확인을 클릭하도록하고 싶지 않습니다 ListBox. ListBox이 비어 있으면 ListBox's도구 설명에 오류 메시지와 함께 빨간색 테두리와 오른쪽에 오류 아이콘을 표시하고 싶습니다 . 이것이 내 응용 프로그램에 다른 모든 오류가 표시되는 방식입니다.

다음은 XAML의 편집 된 버전입니다.

<Window x:Class="MyDialog class's type"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:cs="clr-namespace:MyControlsDLL's namespace"
        xmlns:vm="clr-namespace:My View Model DLL's namespace"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        mc:Ignorable="d"
        DataContext="{Binding Path=SelectedCamera, RelativeSource={RelativeSource Self}}"
        Loaded="MyDialog_Loaded"
        SizeToContent="Height"
        cs:ThemeSelector.CurrentThemeDictionary="{Binding Path=TimeOfDayTheme, RelativeSource={RelativeSource Self}}"
        Width="800"
        WindowStartupLocation="CenterOwner">

    <cs:MyDialog.CommandBindings>
        <cs:DataContextCommandBinding CanExecute="CanAddOrEditItem" Command="cs:MyCommands.AddItem"    Executed="AddOrEditItem" />
        <cs:DataContextCommandBinding CanExecute="CanRemoveItem"    Command="cs:MyCommands.RemoveItem" Executed="RemoveItem" />
    </cs:MyDialog.CommandBindings>

    <cs:MyDialog.Resources>
        <ResourceDictionary>
            <BitmapImage x:Key="ErrorImage" UriSource="Resources/Error.png" />

            <cs:BooleanInverter              x:Key="NOT" />
            <cs:BooleanToVisibilityConverter x:Key="BoolToVisibile"  True="Visible"   False="Collapsed" />
            <cs:BooleanToVisibilityConverter x:Key="BoolToCollapsed" True="Collapsed" False="Visible" />
            <cs:EnumToBooleanConverter       x:Key="SubTypeConverter" />
            <cs:MultiBoolConverter           x:Key="BoolCombiner" />

            <cs:EnumDisplayer ResourceManager="{x:Static res:MyApp.ResourceManager}" Type="{x:Type sys:DateTimeKind}" x:Key="DateTimeKinds">
                <cs:EnumOverride EnumValue="Local"       ResourceKey="DateKind_Local" />
                <cs:EnumOverride EnumValue="Unspecified" ResourceKey="DateKind_Unspecified" />
                <cs:EnumOverride EnumValue="Utc"         ResourceKey="DateKind_Utc" />
            </cs:EnumDisplayer>

            <cs:EnumDisplayer ResourceManager="{x:Static res:MyApp.ResourceManager}" Type="{x:Type vm:MyTypes}" x:Key="MyTypes" />

            <ControlTemplate x:Key="InputErrorTemplate">
                <DockPanel LastChildFill="True">
                    <Image DockPanel.Dock="Right"
                            Height="20"
                            Margin="-30,0,0,0"
                            Source="{StaticResource ErrorImage}"
                            ToolTip="{x:Static res:MyApp.Common_InvalidData}"
                            VerticalAlignment="Center"
                            Width="20" />
                    <Border BorderBrush="Red"
                            BorderThickness="5"
                            Margin="5,5,30,5">
                        <AdornedElementPlaceholder />
                    </Border>
                </DockPanel>
            </ControlTemplate>

            <Style TargetType="{x:Type ListBox}">
                <Setter Property="Validation.ErrorTemplate" Value="{StaticResource InputErrorTemplate}" />
                <Style.Triggers>
                    <Trigger Property="Validation.HasError" Value="True">
                        <Setter Property="ToolTip">
                            <Setter.Value>
                                <Binding Path="(Validation.Errors).CurrentItem.ErrorContent" RelativeSource="{x:Static RelativeSource.Self}" />
                            </Setter.Value>
                        </Setter>
                    </Trigger>
                </Style.Triggers>
            </Style>

            <Style TargetType="{x:Type TextBox}">
                <Setter Property="Validation.ErrorTemplate" Value="{StaticResource InputErrorTemplate}" />
                <Style.Triggers>
                    <Trigger Property="Validation.HasError" Value="True">
                        <Setter Property="ToolTip">
                            <Setter.Value>
                                <Binding Path="(Validation.Errors).CurrentItem.ErrorContent" RelativeSource="{x:Static RelativeSource.Self}" />
                            </Setter.Value>
                        </Setter>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </ResourceDictionary>
    </cs:MyDialog.Resources>

    <Grid Name="LayoutRoot" Grid.IsSharedSizeScope="True">
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>

        <AdornerDecorator Grid.Row="0">
            <Grid Name="CommonRoot">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto" SharedSizeGroup="Column1" />
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="5" />
                    <ColumnDefinition Width="Auto" SharedSizeGroup="Column2" />
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="5" />
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="Auto" />
                </Grid.RowDefinitions>

                <TextBlock Grid.Column="0"
                           Grid.Row="0"
                           Margin="5"
                           Text="Name:"
                           TextAlignment="Right"
                           VerticalAlignment="Center" />
                <TextBox Grid.Column="1"
                         Grid.Row="0"
                         Margin="5,5,30,5"
                         MaxLength="50"
                         Name="NameBox"
                         TabIndex="0"
                         Text="{Binding Mode=TwoWay, NotifyOnSourceUpdated=True, Path=Name, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}"
                         TextAlignment="Left"
                         VerticalAlignment="Center" />

                <TextBlock Grid.Column="3"
                           Grid.Row="0"
                           Margin="5"
                           Text="Type:"
                           TextAlignment="Right"
                           VerticalAlignment="Center" />
                <ComboBox Grid.Column="4"
                          Grid.Row="0"
                          Height="50"
                          ItemsSource="{Binding Source={StaticResource MyTypes}, Path=DisplayNames}"
                          SelectedValue="{Binding Converter={StaticResource MyTypes}, Mode=TwoWay, Path=MyType}"
                          SelectionChanged="LPRTypePicker_SelectionChanged"
                          Margin="5"
                          x:Name="MyTypePicker"
                          TabIndex="1"
                          VerticalAlignment="Center" />

                <TabControl Grid.Column="0"
                            Grid.ColumnSpan="6"
                            Grid.Row="1"
                            Name="Tabs">

                    <TabItem Header="Tab 1"
                             Name="Tab1">
                        <AdornerDecorator>
                            <Border BorderBrush="{DynamicResource ELDControlBorder}"
                                    BorderThickness="0,0,0,1">
                                <Grid Background="{DynamicResource ELDContentBackground}"
                                      Name="LPRConfiguration">
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="Auto" SharedSizeGroup="Column1" />
                                        <ColumnDefinition Width="*" />
                                        <ColumnDefinition Width="5" />
                                        <ColumnDefinition Width="Auto" SharedSizeGroup="Column2" />
                                        <ColumnDefinition Width="*" />
                                        <ColumnDefinition Width="5" />
                                    </Grid.ColumnDefinitions>
                                    <Grid.RowDefinitions>
                                        <!-- Row definitions -->
                                    </Grid.RowDefinitions>

                                    <!-- Controls for this TabItem -->
                                </Grid>
                            </Border>
                        </AdornerDecorator>
                    </TabItem>

                    <TabItem Header="Directories List"
                             Visibility="{Binding Path=CanShow, Converter={StaticResource BoolToVisibile}}">
                        <AdornerDecorator>
                            <Border BorderThickness="0,0,0,1">
                                <Grid Name="Tab2Root">
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="150" SharedSizeGroup="Column1" />
                                        <ColumnDefinition Width="3.5*" />
                                        <ColumnDefinition Width="110" />
                                    </Grid.ColumnDefinitions>
                                    <Grid.RowDefinitions>
                                        <RowDefinition Height="Auto" />
                                        <RowDefinition Height="Auto" />
                                        <RowDefinition Height="Auto" />
                                        <RowDefinition Height="Auto" />
                                        <RowDefinition Height="Auto" />
                                    </Grid.RowDefinitions>

                                    <TextBlock Grid.Column="0"
                                               Grid.Row="0"
                                               HorizontalAlignment="Right"
                                               Margin="5"
                                               Text="Mode:" />

                                    <Grid Grid.Column="1"
                                          Grid.ColumnSpan="2"
                                          Grid.Row="0">
                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition Width="1*" />
                                            <ColumnDefinition Width="2*" />
                                            <ColumnDefinition Width="1*" />
                                            <ColumnDefinition Width="2*" />
                                            <ColumnDefinition Width="1*" />
                                        </Grid.ColumnDefinitions>

                                        <RadioButton Content="SubType 1"
                                                     Grid.Column="1"
                                                     GroupName="SubTypes"
                                                     IsChecked="{Binding Converter={StaticResource SubTypeConverter}, ConverterParameter=SubType1, Path=SubType}"
                                                     Margin="5"
                                                     TabIndex="8"
                                                     VerticalAlignment="Center" />
                                        <RadioButton Checked="SubType_Changed" 
                                                     Content="Value2"
                                                     Grid.Column="3"
                                                     GroupName="SubTypes"
                                                     IsChecked="{Binding Converter={StaticResource SubTypeConverter}, ConverterParameter=SubType2, Path=SubType}"
                                                     Margin="5"
                                                     Name="SubTypeSubType2Button"
                                                     TabIndex="8"
                                                     VerticalAlignment="Center" />
                                    </Grid>

                                    <TextBlock Grid.Column="0"
                                               Grid.Row="2"
                                               HorizontalAlignment="Right"
                                               Margin="5"
                                               Text="An Item:"
                                               VerticalAlignment="Center"
                                               Visibility="{Binding Converter={StaticResource BoolToVisibile}, Path=SubTypeIsSubType1}" />

                                    <Grid Grid.Column="1"
                                          Grid.Row="2"
                                          Visibility="{Binding Converter={StaticResource BoolToVisibile}, Path=SubTypeIsSubType1}">
                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition Width="*" />
                                            <ColumnDefinition Width="Auto" />
                                        </Grid.ColumnDefinitions>

                                        <TextBox Grid.Column="0"
                                                 Margin="5"
                                                 Name="NewItemBox"
                                                 TabIndex="11"
                                                 Text="{Binding Mode=TwoWay, Path=NewItem, UpdateSourceTrigger=PropertyChanged}"
                                                 ToolTip="{x:Static res:MyApp.MyDialog_NewItem_Tooltip}"
                                                 VerticalAlignment="Center" />

                                        <Button Command="cs:MyCommands.Browse"
                                                Content="Browse..."
                                                Grid.Column="1"
                                                Height="35"
                                                Margin="5"
                                                Name="BrowseDirectoriesButton"
                                                TabIndex="12" />
                                    </Grid>

                                    <Button Command="cs:MyCommands.AddItem"
                                            Content="{Binding Path=AddOrEditLabel}"
                                            Grid.Column="2"
                                            Grid.Row="2"
                                            Height="50"
                                            Margin="5"
                                            Name="AddItemButton"
                                            TabIndex="13" />

                                    <TextBlock Grid.Column="0"
                                               Grid.Row="3"
                                               HorizontalAlignment="Right"
                                               Margin="5"
                                               Text="Selected Items:"
                                               TextAlignment="Right"
                                               TextWrapping="WrapWithOverflow"
                                               Visibility="{Binding Converter={StaticResource BoolToVisibile}, Path=SubTypeIsSubType1}" />

                                    <ListBox Grid.Column="1"
                                             Grid.Row="3"
                                             Height="160"
                                             ItemsSource="{Binding Path=SelectedItems}"
                                             Margin="5,5,30,5"
                                             Name="ItemsList"
                                             SelectedValue="{Binding Mode=TwoWay, Path=SelectedItem, ValidatesOnDataErrors=True}"
                                             TabIndex="14"
                                             Visibility="{Binding Converter={StaticResource BoolToVisibile}, Path=SubTypeIsSubType1}" />

                                    <Button Command="cs:MyCommands.RemoveItem"
                                            Content="Remove"
                                            Grid.Column="2"
                                            Grid.Row="3"
                                            Height="50"
                                            Margin="5"
                                            Name="RemoveItemButton"
                                            TabIndex="15"
                                            VerticalAlignment="Top"
                                            Visibility="{Binding Converter={StaticResource BoolToVisibile}, Path=SubTypeIsSubType1}" />
                                </Grid>
                            </Border>
                        </AdornerDecorator>
                    </TabItem>
                </TabControl>
            </Grid>
        </AdornerDecorator>

        <!-- OK & Cancel Buttons here -->
    </Grid>
</Window>

여기 ListBox에는 이것이 처음에는 비어 있지만 Type 속성이 하나의 값이고 SubType 속성이 SubType1 인 경우 비어있는 것은 오류 일 뿐이라는 점에서 복잡합니다. 처음에는 이러한 속성에 해당 값이 없습니다. 대화 상자가 처음 표시되면 유효성 검사 코드가 호출되는 것을 볼 수 있지만 표시 ListBox되지 않기 때문에 오류가 표시 되지 않습니다.

Type 속성을 변경하면 SubType 속성이 자동으로 SubType1로 설정되고 ListBox가 표시되고 비어 있습니다. View Model 클래스 IDataErrorInfo구현 의 유효성 검사 코드 가 호출되고 오류 메시지가 반환되지만 오류 템플릿이 표시되지 않는지 확인할 수있었습니다. 사실 그 탭에는 오류가 전혀 표시되지 않고, 오류를 표시하는 이전 탭과 동일하다고 생각합니다.

내가 뭘 잘못 ListBox했니?

편집하다

A는이 TextBox있음에 Tab그 또한 오류 상태 초기에 및 오류 메시지가 표시되지되고 있었다. 텍스트를 넣으면 유효성 검사 코드가 실행되고 OK로 표시되었습니다. 그러나 비 웠을 때 오류 상태가 표시되었습니다. 내 문제는 사용자가 Type1을 선택하거나 SubType을 변경할 때 오류 상태로 전환하기 위해 무언가를해야한다는 것입니다.

토니 비타 빌레

나는 그것을 작동시켰다. ValidatesOnDataErrors=TrueItemsSource속성에 대한 바인딩을 추가 ListBox했으며 이제 오류 템플릿이 표시됩니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Listbox의 행이 비어 있는지 어떻게 확인합니까?

분류에서Dev

한 파일의 내용이 루비의 다른 파일에 포함되어 있는지 확인하는 방법

분류에서Dev

비어 있지 않은 내용을 수신 한 후 전역 문자열이 비어 있습니다.

분류에서Dev

메시지 보내기 버튼의 필드가 비어 있는지 어떻게 확인할 수 있습니까?

분류에서Dev

dompdf는 내용을 표시하지 않고 멈 춥니 다. 페이지가 비어 있습니다

분류에서Dev

구성 요소에 두 개의 datepicker가 있습니다. 날짜 값이 비어 있지 않으면 {startDate : startDateValue, endDate : endDateValue}를 내보내고 싶습니다.

분류에서Dev

ListView의 내용이 중앙에 있지 않습니다.

분류에서Dev

Kendo 템플릿 내부의 확인란이 비활성화되지 않습니다.

분류에서Dev

스칼라 고양이를 사용하여 비어 있지 않은 필드의 조합 확인

분류에서Dev

사용자 정의 어댑터가있는 ListView 내의 TextView가 업데이트되지 않습니다.

분류에서Dev

각 함수의 특정 div ID에 대해 div 내용이 비어 있는지 여부를 확인하는 방법은 무엇입니까?

분류에서Dev

DynamoDB의는 - 어떻게 기존 테이블이 비어 있거나 비어 있지 않은 것을 확인

분류에서Dev

Meteor의 사용자 계정이 비어 있는지 확인하는 방법은 무엇입니까?

분류에서Dev

내 확인란이 angularjs의 어떤 상자도 선택되지 않았습니다.

분류에서Dev

Roblox의 다른 배열에 배열의 내용이 있는지 확인하는 방법이 있습니까?

분류에서Dev

객체 내부의 배열이 비어 있는지 확인하는 방법 JavaScript

분류에서Dev

dict 내의 목록이 비어 있는지 확인하는 방법

분류에서Dev

양식 제출에 내 사용자 정의 확인란이 다음과 같이 표시되지 않습니다.

분류에서Dev

튜플에 목록의 내용이 포함되어 있는지 확인하는 방법은 무엇입니까?

분류에서Dev

값이 있지만 내 사전이 비어 있습니다.

분류에서Dev

문자열이 정의되지 않았거나 비어 있는지 확인

분류에서Dev

노드의 fs.writeFile이 이전 내용을 덮어 쓰지 않습니다.

분류에서Dev

비어 있으면 div를 확인하고 다른 div의 내용을 문자열로 표시합니다.

분류에서Dev

화면이 내비게이션 스택에 있는지 어떻게 확인할 수 있습니까?

분류에서Dev

`len`에 의존하거나 이터레이터를 사용하지 않고 파이썬 이터 러블이 비어 있는지 확인

분류에서Dev

내 목록이 비어 있어도 내 프롤로그 프로그램이 중지되지 않습니다.

분류에서Dev

시간 비교 : 주어진 시간이 다른 시간의 일정 시간 이내인지 확인

분류에서Dev

Android Studio의 창이 렌더링되지 않거나 비어 있습니다.

분류에서Dev

라디오 버튼의 반환 값이 비어 있는지 어떻게 확인할 수 있습니까?

Related 관련 기사

  1. 1

    Listbox의 행이 비어 있는지 어떻게 확인합니까?

  2. 2

    한 파일의 내용이 루비의 다른 파일에 포함되어 있는지 확인하는 방법

  3. 3

    비어 있지 않은 내용을 수신 한 후 전역 문자열이 비어 있습니다.

  4. 4

    메시지 보내기 버튼의 필드가 비어 있는지 어떻게 확인할 수 있습니까?

  5. 5

    dompdf는 내용을 표시하지 않고 멈 춥니 다. 페이지가 비어 있습니다

  6. 6

    구성 요소에 두 개의 datepicker가 있습니다. 날짜 값이 비어 있지 않으면 {startDate : startDateValue, endDate : endDateValue}를 내보내고 싶습니다.

  7. 7

    ListView의 내용이 중앙에 있지 않습니다.

  8. 8

    Kendo 템플릿 내부의 확인란이 비활성화되지 않습니다.

  9. 9

    스칼라 고양이를 사용하여 비어 있지 않은 필드의 조합 확인

  10. 10

    사용자 정의 어댑터가있는 ListView 내의 TextView가 업데이트되지 않습니다.

  11. 11

    각 함수의 특정 div ID에 대해 div 내용이 비어 있는지 여부를 확인하는 방법은 무엇입니까?

  12. 12

    DynamoDB의는 - 어떻게 기존 테이블이 비어 있거나 비어 있지 않은 것을 확인

  13. 13

    Meteor의 사용자 계정이 비어 있는지 확인하는 방법은 무엇입니까?

  14. 14

    내 확인란이 angularjs의 어떤 상자도 선택되지 않았습니다.

  15. 15

    Roblox의 다른 배열에 배열의 내용이 있는지 확인하는 방법이 있습니까?

  16. 16

    객체 내부의 배열이 비어 있는지 확인하는 방법 JavaScript

  17. 17

    dict 내의 목록이 비어 있는지 확인하는 방법

  18. 18

    양식 제출에 내 사용자 정의 확인란이 다음과 같이 표시되지 않습니다.

  19. 19

    튜플에 목록의 내용이 포함되어 있는지 확인하는 방법은 무엇입니까?

  20. 20

    값이 있지만 내 사전이 비어 있습니다.

  21. 21

    문자열이 정의되지 않았거나 비어 있는지 확인

  22. 22

    노드의 fs.writeFile이 이전 내용을 덮어 쓰지 않습니다.

  23. 23

    비어 있으면 div를 확인하고 다른 div의 내용을 문자열로 표시합니다.

  24. 24

    화면이 내비게이션 스택에 있는지 어떻게 확인할 수 있습니까?

  25. 25

    `len`에 의존하거나 이터레이터를 사용하지 않고 파이썬 이터 러블이 비어 있는지 확인

  26. 26

    내 목록이 비어 있어도 내 프롤로그 프로그램이 중지되지 않습니다.

  27. 27

    시간 비교 : 주어진 시간이 다른 시간의 일정 시간 이내인지 확인

  28. 28

    Android Studio의 창이 렌더링되지 않거나 비어 있습니다.

  29. 29

    라디오 버튼의 반환 값이 비어 있는지 어떻게 확인할 수 있습니까?

뜨겁다태그

보관