私の質問に対する答えは数日前から探していますが、解決策を見つけることができません。リストボックスとバインドされたコンボボックスを使用したWPFマスター - 詳細ビュー
問題は、コンボボックスは、以前選択したユーザーとユーザー・クラスのテストオブジェクトを更新していることです。
はつまり、あなたはuser2の選択とUser2は、あなたがしてTEST5を持っているユーザ5を選択TEST2を持っています。今度はuser2を再度選択すると、test5があることが示されます。
ここにいくつかのコードがあります。私は2つのクラスのユーザーとテストを持っています。そしてそれぞれのObservableCollectionsは2つです。これは私がそれらをセットアップ持っているかである:
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>
は、今私が変更された場合、「{バインディングパス= userTestへのSelectedItemにバインド、モード= OneWay} "それは動作しますが、手動で変更することはできません。思ったここ
がキッカーである...私は.NET 4.0(VS2010)を標的とした場合、それは正常に動作します...
は、誰も私がこれに対する解決策を見つける助けてくださいことはできますか?
こんにちはアンディ、 あなたが示唆したように、私はINotifyPropertyChangedのを実装しているが、残念ながら私はまだ同じ問題を取得しています。 http://cid-eddcda42d46afe81.skydrive.live.com/self.aspx/Public%20Dev/ComboboxTest.zipにソリューションファイルを掲載しました ユーザー番号とテスト番号が同じである必要があることに注意してください。いくつかのユーザーをランダムにクリックし、ユーザーとテストがまだ整列していれば、クリックしたユーザーをチェックしてください。 –
あなたのzipファイルを開くことができませんでした - 無効であることを示すエラーが表示されました。とにかく、あなたのDataContextであり、userTestプロパティを持つオブジェクトもINotifyPropertyChangedを実装していますか? – Andy
こんにちはアンディ、 はい、それは... は、私のようにそれを持っているん: パブリッククラスユーザー: { プライベート文字列名をINotifyPropertyChangedの。 公開ストリング名 ... ... プライベートテストuserTest; 公開テストUserTest { get { return userTest; } セット { userTest = value; OnPropertyChanged( "UserTest"); } } –