有没有办法将命令绑定到listview或Combobox选择?

时间:2016-12-01 07:53:46

标签: c# wpf mvvm combobox

我无法找到使用listview将命令绑定到comboboxmvvm选择事件或任何鼠标点击事件的方式。

<StackPanel Orientation="Horizontal" >
     <ComboBox Name="cmbID" Width="150"  Margin="10" Height="30" SelectedItem="{Binding CmbSelected,Mode=TwoWay}" DisplayMemberPath="ID" ItemsSource="{Binding MyStudent,Mode=TwoWay}"/>
     <Button Name="btnGetDetail"  Margin="10" Command="{Binding getDetails}" Content="Get Details" Height="30" Width="90"/>
     <TextBox Name="tbName1" Width="90" Height="30" Text="{Binding ElementName=cmbID,Path= SelectedItem.Sub}"></TextBox>
</StackPanel>

xaml命令属性中的位置不是按钮,我们得到。

2 个答案:

答案 0 :(得分:1)

如果您正在使用MVVM模式,要在ListViewComboBox中选择项目时执行方法,您只需将其放在SelectedItem设置器中即可。使用您的示例,在您的viewmodel中,您必须拥有如下属性:

private object _cmbSelected;
public object CmbSelected
{
     get
     {
         return this._cmbSelected;
     }
     set
     {
         this._cmbSelected= value;
         //Here you can put your method  
         NotifyPropertyChanged("CmbSelected");
     }
}

当选择某个项目时,会调用该setter并在那里调用您想要的任何方法。在此示例中,将object更改为适当的类型。

答案 1 :(得分:1)

您可以使用EventTrigger提供的InvoceCommandActionSystem.Windows.Interactivity

<Window mlns:i="http://schemas.microsoft.com/expression/2010/interactivity">
...
    <ComboBox SelectedItem="{Binding CmbSelected, Mode=TwoWay}" ItemsSource="{Binding MyStudent}">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="SelectionChanged">
                <i:InvokeCommandAction Command="{Binding YourCommand}"/>
            </i:EventTrigger>
        </i:Interaction.Triggers>
    <ComboBox/>
...
</Window>

顺便说一句,将ItemsSource Binding设置为TwoWay模式毫无意义。如名称所示,它是,永远不会更新绑定属性。