将控件绑定到代码到WPF c#

时间:2016-05-17 09:43:13

标签: c# wpf xaml

我试图将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部件中?

4 个答案:

答案 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解决方案,但我想是一个直截了当的解决方案。 这只有在枚举很小的情况下才有用。如果枚举很大,可能会使用另一个更动态的解决方案。