今天我再次陷入非常基本的概念。我在做什麼錯誤。Combobox選擇的商品問題
我有喜歡的XAML
<ComboBox ItemsSource="{Binding MyItems}" Height="40" Width="200" SelectedIndex="0"
SelectedItem="{Binding MySelectedItem}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock Text="{Binding MySelectedItem.Name}"/>
<Button Content="Test" Grid.Row="1" Click="Button_Click_1"/>
我的模型視圖看起來像
public class MainViewModel : DependencyObject,INotifyPropertyChanged
{
private MyModel mySelectedItem;
public MyModel MySelectedItem
{
get
{
return mySelectedItem;
}
set
{
if (value != mySelectedItem)
{
mySelectedItem = value;
RaisePropertyChange("MySelectedItem");
}
}
}
public IList<MyModel> MyItems
{
get
{
return new List<MyModel>() {new MyModel(){Name="A"},
new MyModel(){Name="B"},
new MyModel(){Name="C"}};
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChange(string name)
{
if(PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
}
一個MyItems財產和一個SelectedItem屬性
和點擊處理程序一樣
private void Button_Click_1(object sender, RoutedEventArgs e)
{
Random r = new Random();
int icnt = r.Next(0,3);
model.MySelectedItem = model.MyItems[icnt];
}
我發現TextBlock.Text正在更新,但Combobox選擇的項目沒有更新。我試圖挖掘原因,發現如果我執行下面的代碼
MyModel prevItem = model.MyItems.Where((m) => m.Name.Equals("A")).FirstOrDefault();
MyModel newItem = model.MyItems.Where((m) => m.Name.Equals("A")).FirstOrDefault();
bool result = prevItem.Equals(newItem);
該值始終爲false。但爲什麼,爲什麼我從集合中獲得對同一對象的新引用。
如何解決此問題。
感謝
每次綁定機制都會詢問MyItems您將創建一個新列表。嘗試創建一次,並使用可觀察的集合 – makc 2013-04-08 06:46:43
哦曼..我浪費了這麼多時間在這..這樣一個小問題,它是..非常感謝。你可以添加它在答案.. – 2013-04-08 06:50:02