簡體   English   中英

綁定字典 <string, int> 至

[英]Binding Dictionary<string, int> to

這是我的枚舉

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

<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上更改Work。 我對SO非常着迷。 但是似乎沒有人談論將Dictionary綁定到DataGridComboBoxColumn。

這是空的原因:

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

這是因為ComboBox將當前Account綁定為ViewModel。 您需要綁定到DataGrid的ViewModel,這就是RelativeSource派上用場的地方:

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

注意:在Visual Studio中檢查“輸出”窗口,您會看到綁定錯誤,告訴您它們在Account找不到名為Work的屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM