WPF组合框 - 由标签
选择项目我有这样WPF组合框 - 由标签
<ComboBox Name="myMenu">
<ComboBoxItem Content="Question 1" Tag="1" />
<ComboBoxItem Content="Question 2" Tag="2" />
<ComboBoxItem Content="Question 3" Tag="3" />
<ComboBoxItem Content="Question 4" Tag="4" />
</ComboBox>
组合框如何以编程设置的标签值选择指数?例如。 'myMenu.selectedTag = 3'和问题3将是选定的项目?
我想比我确实目前的解决方案更简单的东西...
int tagToSelect = 3;
foreach (ComboBoxItem item in myMenu.Items)
{
if(item.Tag.Equals(tagToSelect)
{
myMenu.SelectedItem = item;
}
}
看起来你正在寻找ComboBox控件的广告载体SelectedValuePath。见例如这里http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.selector.selectedvaluepath.aspx
你应该使用数据绑定这样的事情,但你可以通过使用LINQ做到这一点:
int tagToSelect = 3;
myMenu.SelectedItem = myMenu.Items.Single(t => t.Tag.Equals(tagToSelect));
您可以将所选COMBOX值绑定到一个依赖属性。例如,这里是一个依赖属性“CurrentTag”一个窗口:
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
CurrentTag = "4";
}
public static readonly DependencyProperty CurrentTagProperty = DependencyProperty.Register(
"CurrentTag", typeof(string), typeof(Window1),
new PropertyMetadata("1"));
public string CurrentTag
{
get { return (string)this.GetValue(CurrentTagProperty); }
set { this.SetValue(CurrentTagProperty, value); }
}
}
,并在XAML:
<Window x:Class="WpfComboboxBinding.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="100" Width="300"
x:Name="window1">
<StackPanel VerticalAlignment="Center">
<ComboBox Name="myMenu"
SelectedValue="{Binding ElementName=window1, Path=CurrentTag, Mode=TwoWay}"
SelectedValuePath="Tag">
<ComboBoxItem Content="Question 1" Tag="1" />
<ComboBoxItem Content="Question 2" Tag="2" />
<ComboBoxItem Content="Question 3" Tag="3" />
<ComboBoxItem Content="Question 4" Tag="4" />
</ComboBox>
</StackPanel>
</Window>
然后改变所选择的项目,你只需修改属性的值,如在上面的例子中(CurrentTag =“4”;)
为什么在简单的CLR属性可以达到目的时创建DP? –
使用简单属性时,当“CurrentTag”的值被修改时,组合框不会自动更新。 – Jem
是的,ViewModel类应该实现INotifyPropertyChanged接口,我们一般这样做。就我个人而言,我可以通过CLR属性来避免创建静态DP。 –
只是出于好奇,为什么你需要通过标签选择项目?你能解释一下用例吗? –