Silverlight Combobox - предметы с командой - PullRequest
0 голосов
/ 26 апреля 2011

Каков наилучший способ получить элементы комбинированного списка для каждой поддержки Command и CommandParameter?

Я хотел бы реализовать Выбор тем, показанный в нижней части этого сообщения в блоге., кроме со списком вместо контекстного меню.Мне нужно, чтобы каждый элемент комбинированного списка поддерживал Command и CommandParameter, и я хотел бы, чтобы это был просто текст, как показано ниже:

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

Я пробовал гиперссылки, но основнойпроблема заключается в том, что при нажатии непосредственно на текст ссылки поле со списком не закрывается.

Есть ли простой способ сделать это?

РЕДАКТИРОВАТЬ

Хорошо, хорошо, что конкретная цель, которую, как я сказал, я хочу достичь, с помощью комбо-изменения темы SL Toolkit, достигается тривиально.Я могу просто связать выбранный элемент со списком со свойством ViewModel, которое затем предоставляет соответствующую тему, с которой может связываться моя тема SL Toolkit, или, поскольку это чисто пользовательский интерфейс без бизнес-логики, я могу просто перехватить элемент комбинированного списка.изменил событие и обновил оттуда мою themeUri.

Мне любопытно, есть ли хороший способ привязать каждый элемент комбинированного списка к команде с параметром команды?Использование гиперссылки в качестве каждого comboboxItem казалось многообещающим, но это не позволяет закрывать CB после того, как вы щелкнете по элементу, когда вы щелкнете по фактической гиперссылке.

1 Ответ

3 голосов
/ 26 апреля 2011

Вы можете привязать выбранный элемент к вашей ViewModel, и тогда установщик сработает при изменении темы.

Xaml:

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

CodeBehind:

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

        DataContext = new MainPageViewModel();
    }
}

ViewModel:

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");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...