C# CaliburnMicro:如何根据在数据网格中选择的项目自动在组合框中显示值?
Posted
技术标签:
【中文标题】C# CaliburnMicro:如何根据在数据网格中选择的项目自动在组合框中显示值?【英文标题】:C# CaliburnMicro: How can I automatically display a value in a combobox depending on which item is selected in a datagrid? 【发布时间】:2020-12-25 01:15:06 【问题描述】:当用户从 Datagrid 中选择一行时。我希望在组合框中自动选择该项目的颜色。目前,Combobox 对 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();
我已经检查过,Combobox 肯定是连接到 SelectedItem.Colour,因为颜色也会显示在其他地方的文本框中,并且在手动更改 Combobox 选择时会更新。我希望 Combobox 具有与 TextBox 相同的功能和响应能力:
选择数据网格上的项目时,组合框会显示项目的颜色; 手动选择不同的颜色会更改 SelectedItem.Colour 的值。 理想情况下,即使 isEnabled=False,ComboBox 选定项也会显示新 SelectedItem 的颜色,就像 TextBox 值即使被禁用也会更新一样。我试过SelectedItem="Binding SelectedBall.Colour, Mode=TwoWay"
,看不出有什么不同。
感谢您的帮助。
【问题讨论】:
【参考方案1】:104/5000 不知道你的ItemColours是什么数据,我认为SelectedItem="Binding myselecteditem.colour" 在ItemsSource中找不到对应的值,所以没有响应?
【讨论】:
【参考方案2】:问题在于 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 是其颜色之一。
【讨论】:
以上是关于C# CaliburnMicro:如何根据在数据网格中选择的项目自动在组合框中显示值?的主要内容,如果未能解决你的问题,请参考以下文章
我无法使用来自 caliburn micro 的 ActionMessage,我该如何解决?
RadGridView.RowDetailsTemplate 内的 CaliburnMicro 绑定视图
如何使用 caliburn micro 在 Wpf 中注入 EF DbContext