6

我有一个简单的 ComboBox,我想在每次所选值更改时触发单独的命令。这是我的标记示例:

<WrapPanel Grid.Row="0" Visibility="{Binding ShowToggleViewFeedViewManual}">
    <ComboBox Margin="3,3,0,0">
        <ComboBoxItem IsEnabled="{Binding CanSelectViewFeedData}" >
            <ComboBoxItem.CommandBindings>
                <CommandBinding Command="SelectViewFeedDataCommand" />
            </ComboBoxItem.CommandBindings>
            <TextBlock Text="View Feed Data"/>
        </ComboBoxItem>
        <ComboBoxItem IsEnabled="{Binding CanSelectViewManualData}">
            <ComboBoxItem.CommandBindings>
                <CommandBinding Command="SelectManualFeedDataCommand" />
            </ComboBoxItem.CommandBindings>
            <TextBlock Text="View Manual Data"/>
        </ComboBoxItem>
    </ComboBox>
</WrapPanel>   

我收到一条错误消息,指出“无法转换 'SelectViewFeedDataCommand' ”。我也收到其他 ComboBoxItem 的类似错误。ICommand 在 ViewModel 类中定义,该类是 UserControl 的 DataSource,绑定为 DataTemplate。

public ICommand SelectViewFeedDataCommand
{
    get
    {
        // Code to perform
    }
}

我对此进行了广泛的研究,但没有找到如何有效地将 ICommand 绑定到 ComboBoxItem 的答案。

我正在从使用一组单选按钮和相关命令的现有代码中调整它,这很容易完成。有没有简单的方法可以用 ComboBox 做到这一点?

谢谢。

4

2 回答 2

0

您是否尝试过将命令绑定?

<CommandBinding Command="{Binding SelectManualFeedDataCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" />

编辑更新策略:

由于 ComboBox 项不支持直接命令绑定,请尝试创建附加属性:

关联

于 2012-07-23T15:15:31.150 回答
0

我正在查看我的旧帖子并意识到我从未发布过我的问题的解决方案......真的很简单(如果不优雅的话)。我刚刚在我的 ViewModel 中创建了一个包含我的组合框“选择”的列表,然后当 SelectedValue 发生更改时,在属性的设置器中触发了我的“更改”逻辑:

<WrapPanel Grid.Row="0" Visibility="{Binding ShowToggleFeedViewManual}" >
    <ComboBox Margin="10,10,10,10" Width="200" ItemsSource="{Binding AvailableDataSources}" SelectedValue="{Binding SelectedDataSource}"/>
</WrapPanel>

从视图模型:

public FeedSource SelectedDataSource
    {
        get { return _selectedDataSource; }
        set
        {
            _selectedDataSource = value;
            base.OnPropertyChanged("SelectedDataSource");

            //additional code to perform here

        }
    }
于 2015-07-16T16:44:07.590 回答