簡體   English   中英

在代碼隱藏中更改DataGrid ItemsSource綁定

[英]Change DataGrid ItemsSource binding in code-behind

如果DataGrid中沒有項目,則我需要能夠在代碼背后更改DataGrid的綁定,反之亦然。

就目前而言,這是我目前的嘗試:

C#:

List<Character> Characters = new List<Character>
            {
                new Character("Judge Dredd", Gender.Male, CharacterClass.Fighter),
                new Character("Princess Xena", Gender.Female, CharacterClass.Fighter),
                new Character("Hawkeye", Gender.Male, CharacterClass.Ranger),
                new Character("Laura Croft", Gender.Female, CharacterClass.Ranger),
                new Character("Merlin", Gender.Male, CharacterClass.Mage),
                new Character("Wicked Witch of the West", Gender.Female, CharacterClass.Mage)

            };

HeroBox.ItemsSource = Characters;

WPF:

<DataGrid x:Name="InvGrid"
          Background="DimGray"
          Grid.Column="1"
          ItemsSource="{Binding ElementName=HeroBox, Path=SelectedValue.Inventory}"
          AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridCheckBoxColumn Header="Equip"
                                Binding="{Binding Path=Equipped, Mode=TwoWay}"></DataGridCheckBoxColumn>
        <DataGridTextColumn Header="Name"
                            Binding="{Binding Path=Name, Mode=TwoWay}"></DataGridTextColumn>
        <DataGridTextColumn Header="Effect"
                            Binding="{Binding Path=Effect, Mode=TwoWay}"></DataGridTextColumn>
        <DataGridTextColumn Header="Cost"
                            Binding="{Binding Path=Cost, Mode=TwoWay}"></DataGridTextColumn>
    </DataGrid.Columns>
</DataGrid>

嘗試更改InvGrid的ItemsSource-包括編譯錯誤(C#):

if (InvGrid.Items.Count == 0)
{
    Binding b = new Binding("HeroBox")
    {
        ElementName = "HeroBox",
        Path = "SelectedValue.Inventory"
    };
    InvGrid.ItemsSource = new Binding(b);
} 
else
{
    InvGrid.ItemsSource = null;
}

本質上,我想在這里達到相同的效果:

ItemsSource="{Binding ElementName=HeroBox, Path=SelectedValue.Inventory}"

但是在C#中。

InvGrid DataGrid從運行時隨機生成的ComboBox(HeroBox)的選定英雄的清單中提取數據。 此后,DataGrid應該允許用戶輸入任何內容而不會自動生成任何內容,但此刻DataGrid會在庫存中隨機生成一個新的隨機項目,從而允許用戶從那里進行更改。

不要綁定數據網格的itemssource。 而是實現組合框的selectionchanged事件並在其中設置invgrid.itemssource = ((character)HeroBox.selectedItem).inventory (添加必要的代碼是HeroBox.selectedItem為null的情況)

您可能會考慮綁定到類型為ObservableCollection<Character>List<Character>而不是List<Character>因為它已經實現了INotifyCollectionChanged,可以幫助您通知UI某些更改並且需要更新。

這里有一些有用的鏈接:

暫無
暫無

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

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