【发布时间】:2010-11-15 22:29:59
【问题描述】:
几天来,我一直在寻找问题的答案,但找不到解决方案。
问题是组合框用之前选择的用户更新了 User 类中的 Test 对象。
即你选择 user2 并且 user2 有 test2,然后你选择 user5 有 test5。现在如果你再次选择user2,它会显示它有test5。
这是一些代码。我有两个类用户和测试。每个都有两个 ObservableCollections。这就是我设置它们的方式:
public class User
{
public string Name { get; set; }
public int test { get; set; }
public test userTest { get; set; }
}
public class test
{
public int ID { get; set; }
public String Name { get; set; }
}
public class ListOfTests:ObservableCollection<test>
{
public ListOfTests()
{
for (int i = 0; i < 4; i++)
{
test newTest = new test();
newTest.ID = i;
newTest.Name = "Test " + i;
Add(newTest);
}
}
}
public class ListOfUsers: ObservableCollection<User>
{
public ListOfUsers()
{
ListOfTests testlist = new ListOfTests();
for (int i = 0; i < 10; i++)
{
User newUser = new User();
newUser.Name = "User " + i;
newUser.ID = i;
newUser.userTest = testlist[i];
Add(newUser);
}
}
}
XAML 是:
<Window x:Class="ComboboxTest.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ComboboxTest"
Title="Window1" Height="300" Width="300">
<StackPanel x:Name="SP1">
<StackPanel.Resources>
<local:ListOfTests x:Key="ListOfTests" />
</StackPanel.Resources>
<ListBox ItemsSource="{Binding}" DisplayMemberPath="Name" IsSynchronizedWithCurrentItem="True"/>
<TextBox Text="{Binding Path=Name}" Foreground="Black" />
<TextBox Text="{Binding Path=userTest}" />
<ComboBox SelectedItem="{Binding Path=userTest}"
SelectedValue="{Binding Path=userTest.ID}"
ItemsSource="{Binding Source={StaticResource ListOfTests}}"
DisplayMemberPath="Name"
SelectedValuePath="ID"
Foreground="Black" />
</StackPanel>
现在,如果我将 SelectedItem 上的绑定更改为“{Binding Path=userTest, Mode=OneWay}”,那么它可以工作,但我无法手动更改它。
这是一个有趣的想法...如果我以 .Net 4.0 (VS2010) 为目标,那么它可以正常工作...
谁能帮我解决这个问题?
【问题讨论】:
标签: wpf data-binding combobox listbox