簡體   English   中英

C# CaliburnMicro:如何根據在數據網格中選擇的項目自動在組合框中顯示值?

[英]C# CaliburnMicro: How can I automatically display a value in a combobox depending on which item is selected in a datagrid?

當用戶從 Datagrid 中選擇一行時。 我希望在組合框中自動選擇該項目的顏色。 目前,組合框對 Datagrid 選擇沒有響應。

XAML:

<DataGrid x:Name="MyCollection" SelectedItem="{Binding MySelectedItem}">
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding Path=ItemName}"/>
    </DataGrid.Columns>
</DataGrid>

<ComboBox ItemsSource="{Binding ItemColours}" SelectedItem="{Binding MySelectedItem.Colour}"/>
<TextBox Text="{Binding MySelectedItem.Colour}" isEnabled="False"/>

視圖模型:

public BindableCollection<Item> MyCollection { get; set; }

private Item_mySelectedItem;
public Item MySelectedItem
{
    get { return _mySelectedItem; }
    set
    {
        _mySelectedItem= value;
        NotifyOfPropertyChange(() => MySelectedItem);
    }
}

// Constructor
public Myclass()
{
    MyCollection = GetData();
}

我已經檢查過,並且組合框確實連接到 SelectedItem.Colour,因為顏色也顯示在其他地方的文本框中,並且在手動更改組合框選擇時會更新。 我希望 Combobox 具有與 TextBox 相同的功能和響應能力:

  • 選擇DataGrid上的項目時,ComboBox會顯示項目的顏色;
  • 手動選擇不同的顏色會更改 SelectedItem.Colour 值。
  • 理想情況下,即使在 isEnabled=False 時,ComboBox 所選項目也會顯示新的 SelectedItem 的顏色,與即使禁用 TextBox 值也會更新的方式相同。

我試過SelectedItem="{Binding SelectedBall.Colour, Mode=TwoWay}" ,我看不出任何區別。

謝謝你的幫助。

104/5000 不知道你的ItemColours是什么數據,我覺得SelectedItem="{Binding myselecteditem.colour}"在ItemsSource中找不到對應的值,所以沒有反應?

問題在於 ComboBox 正在比較兩個 Color 對象以查看它是否應該顯示顏色。 例如,由於“Blue”的兩個實例具有不同的哈希碼,因此它將始終返回 false。 解決方案是覆蓋我的 Color 類的 Equals() 和 GetHashCode() 方法。

public partial class Colour
{
    public override string ToString()
    {
        return Name;
    }

    public override bool Equals(object obj)
    {
        Colour otherColour;
        try
        {
            otherColour = (Colour)obj;
        }
        catch (Exception)
        { return false; }

        return (otherColour.Id == this.Id);
    }

    public override int GetHashCode()
    {
        return this.Id;
    }
}

現在,當 Color 類的兩個實例具有相同的 ColourID 時,它們將被視為相等。 這意味着 ComboBox 將識別 SelectedItem.Colour 是其顏色之一。

暫無
暫無

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

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