簡體   English   中英

將值綁定到ComboBox WPF

[英]Binding value to ComboBox WPF

因此,我需要制作一個WPF應用程序,該應用程序將從列表中獲取值並將其存儲到DataGrid。 我想在網格中顯示3個字段:用戶名,全名和角色。 現在,角色可以具有2個值:購物者和供應商。 如何使該部分成為DataGridTemplate? 此外,如何為每個用戶選擇合適的負載? 空行是缺少代碼的位置。 這是我正在處理的代碼:

<Grid>
    <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding UserList}" Name="dgUsers" HorizontalAlignment="Left" Height="450" Width="400">
        <DataGrid.Columns>
            <DataGridTemplateColumn Header="Username" Width="100" IsReadOnly="True">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Username}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTemplateColumn Header="Full Name" Width="200" IsReadOnly="True">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding FullName}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTemplateColumn Header="Role" Width="100">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>

                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>
</Grid>

編輯:

作為DataTemplate,我這樣做:

<DataGridTemplateColumn.CellTemplate>
     <DataTemplate>
            <ComboBox ItemsSource="{Binding valueList}" SelectedIndex="{Binding Role}"/>
     </DataTemplate>
</DataGridTemplateColumn.CellTemplate>

作為角色,在構造函數中,我這樣做:

public class UserToChange
{
    public string Username { get; set; }
    public string FullName { get; set; }
    public int Role { get; set; }
    public List<string> valueList { get; set; }

    public UserToChange()
    {

    }

    public UserToChange(UserVM row)
    {
        Username = row.UserName;
        FullName = row.FirstName + " " + row.LastName;
        Role = row.RoleId == 102 ? 0 : 1;
        valueList = new List<string>
        {
            "Supplier",
            "Shopper"
        };
    }
}

而且有效。 現在,我需要對邏輯進行編程以更新數據庫,但是我可以解決這個問題。 感謝大家!

您可以通過兩種方式綁定Collection。

1)在DataTemplate創建一個ComboBox

         <DataGridTemplateColumn Header="Role" Width="100">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <ComboBox ItemsSource="{Binding dataList}"  Width="100" DisplayMemberPath="{Binding DisplayProperty}" SelectedValuePath="{Binding PropertyId}" SelectedIndex="0" />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>

對於ComboBox,使用SelectedIndex設置加載時的默認項目。

2)代替DataGridTemplateColumn使用DataGridComboBoxColumn

<DataGridComboBoxColumn ItemsSource="{Binding dataList}" Width="100" Header="Role2" DisplayMemberPath="{Binding DisplayProperty}" SelectedValuePath="{Binding PropertyId}" SelectedItemBinding="{Binding DefaultValuePro, Mode=TwoWay}" />

對於DataGridComboBoxColumn,請使用SelectedItemBinding將其與屬性綁定以設置默認值。

  1. 首先用您各自的值填充ListofRole集合。
  2. 將其與DataGridTemplateColumn中的組合框綁定。
  3. 綁定組合框的SelectedValue屬性,神奇的是,將SelectedValue綁定到在dataList中包含Role值的變量。

    注意:ListofRole集合不應該是自定義類型,那么我們需要在組合框中添加更多參數,它應該是普通的字符串類型。

      <DataGridTemplateColumn Header="Role" Width="0.45*"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <ComboBox ItemsSource="{Binding ListOfRole}" SelectedValue="{Binding Role,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> 

暫無
暫無

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

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