Silverlight Combobox - 带命令的项目

时间:2011-04-26 16:19:27

标签: silverlight silverlight-4.0

将组合框的元素分别用于支持Command和CommandParameter的最佳方法是什么?

我想在this blog post的底部显示主题选择器,除了使用组合框而不是上下文菜单。我需要组合框的每个元素来支持Command和CommandParameter,我希望它只是纯文本,如下面的组合所示。

        <ComboBox>
            <ComboBox.Items>
                <TextBlock>A</TextBlock>
                <TextBlock>B</TextBlock>
                <TextBlock>C</TextBlock>
            </ComboBox.Items>
        </ComboBox>

我尝试过超链接,但主要的问题是当你直接点击链接文本时,组合框不会关闭。

有一种简单的方法吗?

修改

好吧,我说我希望实现的具体目标 - 组合更改SL Toolkit主题 - 很容易实现。我可以简单地将组合的选定项绑定到ViewModel属性,然后公开我的SL Toolkit主题可以绑定的相应主题,或者,因为这纯粹是没有业务逻辑的UI活动,我可以抓住组合框项目改变了事件,并从那里更新了我的themeUri。

我很好奇,有没有一种方法可以将每个组合框项目绑定到带有命令参数的命令?使用超链接作为每个comboboxItem似乎很有希望,但是当您单击实际超链接时单击项目后,这会阻止CB关闭。

1 个答案:

答案 0 :(得分:3)

您可以将所选项目绑定到ViewModel,然后在更改主题时触发setter。

的Xaml:

<ComboBox SelectedItem="{Binding SelectedTheme, Mode=TwoWay}" ItemsSource="{Binding Themes}" />

代码隐藏:

public partial class MainPage : UserControl
{
    public MainPage()
    {
        InitializeComponent();

        DataContext = new MainPageViewModel();
    }
}

视图模型:

public class MainPageViewModel : INotifyPropertyChanged
{
    public ObservableCollection<string> Themes { get; set; }

    private string _selectedTheme;
    public string SelectedTheme
    {
        get { return _selectedTheme; }
        set
        {
            _selectedTheme = value;
            // Change the Theme
            RaisePropertyChanged("SelectedTheme");
        }
    }

    public MainPageViewModel()
    {
        Themes = new ObservableCollection<string>();
        Themes.Add("Red");
        Themes.Add("Green");
        Themes.Add("Blue");
    }
}