我需要根据父容器接收的数据上下文中的字段值绑定ComboBox的Selected Item。
容器是一个网格,当它被点击时从itemcontrol中的项接收它的datacontext
private void Button_Click(object sender , RoutedEventArgs e)
{
GridEmployee.DataContext = ((Button)sender).DataContext;
}
* Button从Employee's绑定到itemControl的列表获取了它的itemsource
网格中有一些控件,它们是一个组合框,我通过Enum
初始化public Enum Gender
{
Male,Female
};
foreach(string _gender in Enum.GetNames(Gender) )
{
GenderComboBox.Items.Add(_gender);
}
Employee类具有匹配的Property Gender
private string gender;
public string Gender
{
get{return gender;}
set
{
gender = value ;
if( PropertyChanged != null )
PropertyChanged(this,new PropertyChangedEventArgs("Gender"));
}
}
GenderComboBox.SelectedItem的界限为有界对象Employee的Gender属性的值
<ComboBox x:Name="GenderComboBox" SelectedItem="{Binding Gender , Mode=TwoWay}" />
这里的问题当然是项目没有被选中..
我认为可能是因为组合框中的项目是字符串,我尝试根据自定义转换器绑定它们,该转换器只接受Enum Value并返回.ToString() 它的。
但是我无法检查在表单的承包商中抛出An XamlParseException的原因。
我没有完全理解它为什么会发生,可能是因为当我形成负载时它没有转换值。
总结如何从My Employee Class绑定一个Property 使用Property的Value的字符串表示形式的组合框?
答案 0 :(得分:2)
在我的情况下很好地工作....
<强> XAML 强>
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:tk="http://schemas.microsoft.com/wpf/2008/toolkit"
Title="GenderSelection" Height="100" Width="300" x:Name="MyWindow">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock FontSize="40"
Text="{Binding MyGender, ElementName=MyWindow, Mode=TwoWay}"/>
<ComboBox Grid.Row="1"
ItemsSource="{Binding Genders, ElementName=MyWindow}"
SelectedItem="{Binding MyGender, ElementName=MyWindow, Mode=TwoWay}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</Grid>
</Window>
代码背后
public enum Gender
{
Male,
Female
}
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window, INotifyPropertyChanged
{
private string myGender = Gender.Male.ToString();
public string MyGender
{
get
{
return myGender;
}
set
{
myGender = value;
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs("MyGender"));
}
}
}
public string[] Genders
{
get
{
return Enum.GetNames(typeof(Gender));
}
}
public Window1()
{
InitializeComponent();
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
#endregion
}
请告诉我这是否指引您正确的方向......
答案 1 :(得分:0)
只需将ComboBox的初始化更改为
即可foreach(string _gender in Enum.GetNames(Gender) )
{
GenderComboBox.Items.Add(_gender.ToString());
}
这应该有效,因为Employees类的Gender属性返回一个字符串。