如何解决C#CaliburnMicro:如何根据数据网格中选择的项目自动在组合框中显示值?
当用户从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"/>
ViewModel:
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,因为颜色也显示在其他地方的文本框中,并且在手动更改组合框选择时会进行更新。我希望组合框具有与TextBox相同的功能和响应能力:
- 在数据网格上选择一个项目时,组合框显示该项目的颜色;
- 手动选择其他颜色会更改SelectedItem.Colour值。
- 理想情况下,即使isEnabled = False,ComboBox选定项也会显示新SelectedItem的颜色,就像TextBox值被更新一样,即使它被禁用。
我尝试过SelectedItem="{Binding SelectedBall.Colour,Mode=TwoWay}"
,但没有发现任何区别。
感谢您的帮助。
解决方法
104/5000 我不知道您的ItemColours是哪种数据,我认为SelectedItem =“ {Binding myselecteditem.colour}”在ItemsSource中找不到相应的值,因此没有响应?
,问题是ComboBox正在比较两个Color对象以查看它是否应该显示颜色。例如,由于“蓝色”的两个实例具有不同的哈希码,因此它将始终返回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是其颜色之一。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。