gpt4 book ai didi

c# - 从后面的代码更新 ComboBox SelectedItem

转载 作者:行者123 更新时间:2023-12-03 10:24:14 27 4
gpt4 key购买 nike

我有一个 View,其中 ComboBox 绑定(bind)到我的 viewModel 属性。一切正常但我实际上想重用我的 View 并且需要使用给定值更新控件。设置属性不会更新可视化用户界面即使事件被解雇,一切看起来都很好。

接受 ComboBox 可视化 UI 一切正常。

提示?!

XAML 控件

<telerik:RadComboBox 
ItemTemplate="{StaticResource SelectUserComboBoxTemplate}"
SelectedItem="{Binding Path=SelectedUser, Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}"
ItemsSource="{Binding Path=C_users}"
telerik:TextSearch.TextPath="displayName"
Name="radComboBox1"
Margin="14,12,0,0"
Height="31"
VerticalAlignment="Top"
HorizontalAlignment="Left"
Width="253"
TextSearchMode="Contains"
IsEditable="True"
OpenDropDownOnFocus="True"
IsFilteringEnabled="True"
>
</telerik:RadComboBox>

设置值的重载构造函数

    public TicketControlTabViewModel(ticket t)
{
activeTicket = t;
SelectedUser = customerServiceClient.getUser(t.customer_users.id);
MetaString = t.meta;
Description = t.description;
ActiveId = t.id.ToString();
Selected_priority = t.priority;
SelectedStatus = t.status;
this.RefreshC_users();
this.RefreshSupportDepartments();
this.RefreshSupportUsers();
}

我的 ViewModel 中的属性

    private customer_users selectedUser { get; set; }
public customer_users SelectedUser
{

get {
return this.selectedUser;
}
set {
if (value != null){
this.selectedUser = value;
this.UpdateCustomerDepartment(value);
this.OnPropertyChanged("SelectedUser");
SaveTicket();
}

}
}

最佳答案

默认情况下,WPF 通过引用而不是值来比较 SelectedItem。这意味着如果 SelectedItemItemsSource 中的项目在内存中不是完全相同的对象,则比较将返回 false,并且不会选择该项目。

例如,这可能行不通

MyCollection = new ObservableCollection<User>(DAL.GetUsers());
SelectedUser = DAL.GetUser(1);

但是这会:

MyCollection = new ObservableCollection<User>(DAL.GetUsers());
SelectedUser = MyCollection.FirstOrDefault(p => p.Id == 1);

这是因为第二个示例将 SelectedUser 设置为 MyCollection 中实际存在的项目,而第一个示例可能不存在。即使数据相同,它们在内存中引用不同的对象。

如果您选择的项目在内存中未引用与 ItemsSource 项目相同的项目,则使用 SelectedValueSelectedValuePath 绑定(bind) ComboBox 的默认选择,或覆盖如果要比较的对象中的数据相同,则类的 .Equals() 方法返回 true。

public override bool Equals(object obj)
{
if (obj == null || !(obj == MyClass))
return false;

return ((MyClass)obj).Id == this.Id);
}

关于c# - 从后面的代码更新 ComboBox SelectedItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8330521/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com