我有一个带有ComboBox的视图绑定到我的viewModel属性。 一切正常,但我真的想重用我的视图和需要 使用给定值更新控件。设置属性不会更新可视UI 即使事件被解雇,每一个看起来都很好。
一切正常,接受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();
}
}
}
答案 0 :(得分:2)
默认情况下,WPF按引用比较SelectedItem
,而不是按值。这意味着如果SelectedItem
与ItemsSource
中的项目不完全相同,那么比较将返回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项目中引用内存中的相同项目,则使用SelectedValue
和SelectedValuePath
绑定ComboBox的默认选项,或覆盖.Equals()
如果被比较的对象中的数据相同,则类的方法返回true。
public override bool Equals(object obj)
{
if (obj == null || !(obj == MyClass))
return false;
return ((MyClass)obj).Id == this.Id);
}
答案 1 :(得分:1)
如果您不Items
集合不包含等于SelectedItem
的项目,则可能会发生这种情况。检查您是否有这样的项目(可能是您忘记在课程中重载Equals
并且它使用参考比较)