2014-04-02 46 views
0

这是我的枚举绑定字典<string, int>到

public enum Works 
{ 
    [Description("Admin")] 
    Admin, 
    [Description("Chưa Set")] 
    UnSetted, 
    [Description("Vào - Ra")] 
    InOut, 
    [Description("Ra - Vào")] 
    OutIn 
} 

这是我的ViewModel

public class DivisionViewModel : ViewModel<IDivisionView> 
{ 
    private IEnumerable<Account> accounts; 
    private ICommand confirmCommand; 
    private Dictionary<string, int> works; 
.... 
} 

我转换枚举得到一个解释,并得到帐户这样

this.divisionViewModel.Accounts = Root.Accounts; 

this.divisionViewModel.Works = Enum.GetValues(typeof(Works)) 
            .Cast<Works>() 
            .ToDictionary(t => Tools.GetEnumDescription((Works)t), t => (int)t); 

这里是我的WPF数据网格

<DataGrid ItemsSource="{Binding Accounts}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
      <DataGrid.Columns> 
       <DataGridTextColumn 
        Binding="{Binding FullName, UpdateSourceTrigger=PropertyChanged, ValidatesOnExceptions=True, NotifyOnValidationError=True}" 
           Header="Tên nhân viên" Width="*" ElementStyle="{StaticResource TextCellElementStyle}" 
           EditingElementStyle="{StaticResource TextCellEditingStyle}"/> 
       <DataGridComboBoxColumn></DataGridComboBoxColumn> 
      </DataGrid.Columns> 
     </DataGrid> 

如何将this.divisionViewModel.Works绑定到DataGridComboBoxColumn? p/s:我希望我的用户直接在DataGrid上更改工作。我已经在SO上接吻了。但似乎没有人谈论将Dictionary绑定到DataGridComboBoxColumn。

回答

0

之所以这样,是空的:

<DataGridComboBoxColumn ItemsSource="{Binding Works.Keys}"> 

是因为ComboBox将绑定为一个ViewModel当前Account。您需要绑定到DataGrid的视图模型,而这也正是RelativeSource就派上用场了:

<DataGridComboBoxColumn ItemsSource="{Binding Works.Keys, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}"> 

注:检查输出窗口在Visual Studio中,你会看到绑定错误,告诉你,他们可以“ t找到名为Work的房产Account

+0

这是行不通的。它显示一个空选择列表。我试图把另一个组合框放在datagird之外,并绑定到 - >它工作。 – user2877989

+0

哎呀抱歉,我读了你的ViewModel错误。让我编辑我的答案 – Damascus

相关问题