我无法使用MVVM从WPF中的ListBox控件获取子控件

时间:2011-07-01 14:49:05

标签: wpf mvvm

我遇到了严重的麻烦。我有列表框控件,其中有很多组合框。每当在组合框中选择值时,我必须将其他控件设置为隐藏。我正在使用MVVM pattren。我无法从ListBox控件获取子控件,但我可以在viewmodel中获取ListBox控件。如何在viewmodel中获取这些控件?可能吗?我正在使用框架4.0。我已经在下面显示了代码中的代码。

  <ListBox x:Name="lstItems" MaxHeight="300" FontSize="11" Margin="12,0,20,38" ItemsSource="{Binding Source={StaticResource listedView}, Path=myItemsSource, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}">
        <ListBox.ItemTemplate >
            <DataTemplate>
                <Border BorderBrush="Blue" Margin="0,4,0,4" BorderThickness="1" CornerRadius="5">
                    <StackPanel Orientation="Horizontal">
                        <Label Content="Show rules where:" Name="lblshowrules"></Label>
                        <ComboBox x:Name="cboShowRuleWhere" Height="20" Width="200"  ItemsSource="{Binding Source={StaticResource listedView}, Path=FilterRules}" DisplayMemberPath="RuleName"  SelectedValuePath="RuleId" SelectedValue="{Binding Source={StaticResource listedView}, Path=SelectedRuleName, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" ></ComboBox>
                        <Grid Height="29" HorizontalAlignment="Left" Name="grid1" VerticalAlignment="Top" Width="496" Grid.Row="1" Margin="0,0,0,0">
                            <ComboBox Height="21" HorizontalAlignment="Left" Margin="6,4,0,0" x:Name="cboRuleCondtion"  VerticalAlignment="Top" Width="212" />
                            <TextBox Height="20" HorizontalAlignment="Left" Margin="242,3,0,0" x:Name="txtValue" VerticalAlignment="Top" Width="245" Visibility="Hidden"/>
                            <ComboBox Height="21" HorizontalAlignment="Left" Margin="224,3,0,0" x:Name="cboValue" VerticalAlignment="Top" Width="205" Visibility="Hidden" />
                            <DatePicker Height="28" HorizontalAlignment="Left" Margin="242,-3,0,0" x:Name="dtpFromDate" VerticalAlignment="Top" Width="98" Visibility="Hidden" />
                            <DatePicker Height="31" HorizontalAlignment="Left" Margin="346,-3,0,0" x:Name="dtpToDate" VerticalAlignment="Top" Width="98" Visibility="Hidden"/>
                        </Grid>
                        <Button Name="cmdAddLevel" Padding="0" Margin="-1,1,0,-1" Width="75" Command ="{Binding Source={StaticResource listedView}, Path=AddLevelCommand, UpdateSourceTrigger=PropertyChanged}" BorderBrush="White" BorderThickness="1" Height="25" HorizontalContentAlignment="Center">
                            <StackPanel Orientation="Horizontal">
                                <Image Height="16" Width="16" HorizontalAlignment="Left" Margin="1,0,0,-1">
                                </Image>
                                <TextBlock Text="Add Level" FontWeight="Bold" Height="16" Width="70" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="8,2,0,-1" />
                            </StackPanel>
                        </Button>
                        <Label Name="lblDeleteLevel"  Margin="3,0,0,0" Width="75" TabIndex="7"  HorizontalAlignment="Left">
                            <Hyperlink >
                                <TextBlock Text="Delete Level" />
                            </Hyperlink>
                        </Label>
                    </StackPanel>
                </Border>
            </DataTemplate>
        </ListBox.ItemTemplate>
        <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel Orientation="Vertical" />
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>
    </ListBox>

请帮帮我。再一次,我想知道如何从父控件中获取子控件...是否可能?

1 个答案:

答案 0 :(得分:0)

使用MVVM模式,您不应直接引用任何控件。或者,您应该在viewmodel上创建一个布尔属性,以确定是否应该显示各种控件。然后使用转换器将要隐藏的控件的Visibility属性绑定到此属性。

有关可见性转换器的详细信息,请参阅此前的问答:Link