将组合框的元素分别用于支持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关闭。
答案 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");
}
}