我试图将ComboBox从代码绑定到XAML。 这是我的XAML部分:
<GridViewColumn Header="Action Type">
<GridViewColumn.CellTemplate>
<DataTemplate>
<ComboBox x:Name="comboBox" ItemsSource="{Binding ActionType}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
在绑定itemsources之前(在代码中完成),我准备数据集并在代码中创建控件(具有一些特定属性)。 现在我想将comboBox XAML绑定到我的C#代码comboBox元素,例如:
public ComboBox ActionType { get; set; }
我该如何执行这样的任务?通常,是否可以将代码中的控件附加到XAML部件中?
答案 0 :(得分:1)
您只需要设置组合框的ItemSource属性。
List<ActionTypes> Actions = new List<ActionTypes>();
Actions.add(); etc.....
comboBox.ItemSource = Actions;
答案 1 :(得分:1)
按原样定义您的财产:
public Ilist<string> ActionType
{
get { return _actionType; }
set
{
_actionType= value;
OnPropertyChanged("ActionType");
}
}
当您设置其值时,它将被通知ComboBox而不会出现脏代码。
答案 2 :(得分:0)
为了让这个工作我做了这个,我改变了:
C# // getter setter public List ActionTypeList {get;组; }
// init
ActionTypeList = Enum.GetNames(typeof(Data.Structures.ActionType)).ToList();
XAML // itemsource to list
这不是使用组合框工作的枚举类型的最佳方法。选择和操作后我切换字符串上的大小写。以某种方式在wpf字段中使用枚举和组合框感觉很脏....我重新考虑它并可能再次删除枚举。
答案 3 :(得分:0)
这是我制定的解决方案。
Enum被称为&#34; ActionToggle&#34;。然后我做了以下事情:
在MainWindow.xaml.cs中,我定义了:
public List<string> ActionToggleList { get; set; }
然后我将这个列表绑定在ComboBox上:
ComboBox x:Name="comboBox" ItemsSource="{Binding ActionToggleList}" SelectedItem="{Binding ActionToggleSelected}" SelectionChanged="OnActionToggleComboBoxChanged"/>
当MainWindow初始化时,我已添加:
ActionToggleList = new List<string>();
ActionToggleList = Enum.GetNames(typeof(ActionToggle)).ToList();
另一个重要步骤是在函数OnActionToggleComboBoxChanged中进行一些评估。只需检查&#34; ActionToggleSelected即可查看ActionToggle可能性的所有情况。
private void OnActionToggleComboBoxChanged(object sender, SelectionChangedEventArgs e)
{
ComboBox c = sender as ComboBox;
if(c.Items.Count > 0)
{
// make it switch-case on string or if-clauses:
if (ActionToggleSelected.Equals(ActionToggle.none.ToString()))
{
// do some stuff
}
if (ActionToggleSelected.Equals(ActionToggle.start.ToString()))
{
// do some stuff
}
}
}
也许不是最好的100%WPF-stlyed解决方案,但我想是一个直截了当的解决方案。 这只有在枚举很小的情况下才有用。如果枚举很大,可能会使用另一个更动态的解决方案。