Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf组合框选择已更改的事件命令参数_Wpf_Mvvm_Combobox_Selectedindex - Fatal编程技术网

Wpf组合框选择已更改的事件命令参数

Wpf组合框选择已更改的事件命令参数,wpf,mvvm,combobox,selectedindex,Wpf,Mvvm,Combobox,Selectedindex,我这里有一些学术问题。看看标记: <Grid Margin="10,10,10,10"> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> </Grid.RowDefinitions> <ComboBox SelectedIndex="{Binding

我这里有一些学术问题。看看标记:

<Grid  Margin="10,10,10,10">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <ComboBox SelectedIndex="{Binding SelectedIndex}"
                Margin="5"
                Width="100">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="SelectionChanged">
                <i:InvokeCommandAction Command="{Binding TestCommand}" 
                                        CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ComboBox}, 
                                        Path=SelectedIndex}"/>
            </i:EventTrigger>
        </i:Interaction.Triggers>
        <ComboBoxItem>Item1</ComboBoxItem>
        <ComboBoxItem>Item2</ComboBoxItem>
        <ComboBoxItem>Item3</ComboBoxItem>
    </ComboBox>
    <Button Grid.Row="1" 
            Content="Set SelectedIndex to 0" 
            Width="100" 
            Command="{Binding ButtonCommand}"
            Margin="5">
    </Button>
</Grid>
那么,问题在哪里?给你。当我选择Item2或Item3时,SelectedIndex属性等于1或2。例如,我单击了Item2,并选择了Index等于1。因此,当我单击按钮并将SelectedIndex设置为0时,它会在Combobox中生成事件SelectionChanged。这是合乎逻辑的。然后,事件触发绑定命令TestCommand。 在TestMethod中,index CommandParameter等于1!这是一个问题,尽管DataContext的SelectedIndex等于0。 那么,这是Wpf bug还是其他什么

            <i:EventTrigger EventName="SelectionChanged">
                <i:InvokeCommandAction Command="{Binding TestCommand}" ></i:InvokeCommandAction>
            </i:EventTrigger>
        </i:Interaction.Triggers>
我是这样做的:

 xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"


<ComboBox>
                        <ComboBox.Items>
                            <ComboBoxItem Content="item1" >
                                <i:Interaction.Triggers>
                                    <i:EventTrigger EventName="Selected">
                                        <i:InvokeCommandAction Command="{Binding item1Cmd}"/>
                                    </i:EventTrigger>
                                </i:Interaction.Triggers>
                            </ComboBoxItem>
                            <ComboBoxItem Content="item2" >
                                <i:Interaction.Triggers>
                                    <i:EventTrigger EventName="Selected">
                                        <i:InvokeCommandAction Command="{Binding item2Cmd}"/>
                                    </i:EventTrigger>
                                </i:Interaction.Triggers>
                            </ComboBoxItem>
                            <ComboBoxItem Content="item3" >
                                <i:Interaction.Triggers>
                                    <i:EventTrigger EventName="Selected">
                                        <i:InvokeCommandAction Command="{Binding item3Cmd}"/>
                                    </i:EventTrigger>
                                </i:Interaction.Triggers>
                            </ComboBoxItem>
                        </ComboBox.Items>
                    </ComboBox>
这种方法对我很管用。我知道对每个ComboBoxItems使用相同的代码会产生一些代码开销


如果您的组合框需要动态加载,那么您应该能够在代码隐藏中添加交互。触发器

为什么要尝试两次处理组合框的行为,在上面的场景中,您只需要绑定SelectedIndex属性。任何想要执行的行为都应该将其作为setter实现的一部分。
 xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"


<ComboBox>
                        <ComboBox.Items>
                            <ComboBoxItem Content="item1" >
                                <i:Interaction.Triggers>
                                    <i:EventTrigger EventName="Selected">
                                        <i:InvokeCommandAction Command="{Binding item1Cmd}"/>
                                    </i:EventTrigger>
                                </i:Interaction.Triggers>
                            </ComboBoxItem>
                            <ComboBoxItem Content="item2" >
                                <i:Interaction.Triggers>
                                    <i:EventTrigger EventName="Selected">
                                        <i:InvokeCommandAction Command="{Binding item2Cmd}"/>
                                    </i:EventTrigger>
                                </i:Interaction.Triggers>
                            </ComboBoxItem>
                            <ComboBoxItem Content="item3" >
                                <i:Interaction.Triggers>
                                    <i:EventTrigger EventName="Selected">
                                        <i:InvokeCommandAction Command="{Binding item3Cmd}"/>
                                    </i:EventTrigger>
                                </i:Interaction.Triggers>
                            </ComboBoxItem>
                        </ComboBox.Items>
                    </ComboBox>