C# 组合框选定项目问题

C# 组合框选定项目问题,c#,wpf,data-binding,C#,Wpf,Data Binding,今天我又被一个非常基本的概念绊住了。我犯了什么错误 我有类似XAML的 <ComboBox ItemsSource="{Binding MyItems}" Height="40" Width="200" SelectedIndex="0" SelectedItem="{Binding MySelectedItem}"> <ComboBox.ItemTemplate> <DataTemplate>

今天我又被一个非常基本的概念绊住了。我犯了什么错误

我有类似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"/>
我发现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时,您都将创建一个新列表。
尝试创建一次,然后使用observable collection

您将获得一个新的引用,因为每次绑定机制请求MyItems时,您都将创建一个新列表。
尝试创建一次,然后使用observable collection

您需要修改MyItems代码。您每次都会收到新的列表。试试这个

private List<MyModel> _myItems;
public IList<MyModel> MyItems
{
    get
    {
        if (_myItems == null)
        {
            myItems = new List<MyModel>();
            myItems.Add(new MyModel() { Name = "A" });
            myItems.Add(new MyModel() { Name = "B" });
            myItems.Add(new MyModel() { Name = "C" });
        }
        return _myItems}
    }
}
private List\u myItems;
公共物品
{
得到
{
如果(_myItems==null)
{
myItems=新列表();
添加(新的MyModel(){Name=“A”});
添加(新的MyModel(){Name=“B”});
添加(新的MyModel(){Name=“C”});
}
返回_myItems}
}
}

您需要修改MyItems代码。您每次都会收到新的列表。试试这个

private List<MyModel> _myItems;
public IList<MyModel> MyItems
{
    get
    {
        if (_myItems == null)
        {
            myItems = new List<MyModel>();
            myItems.Add(new MyModel() { Name = "A" });
            myItems.Add(new MyModel() { Name = "B" });
            myItems.Add(new MyModel() { Name = "C" });
        }
        return _myItems}
    }
}
private List\u myItems;
公共物品
{
得到
{
如果(_myItems==null)
{
myItems=新列表();
添加(新的MyModel(){Name=“A”});
添加(新的MyModel(){Name=“B”});
添加(新的MyModel(){Name=“C”});
}
返回_myItems}
}
}

每次绑定机制请求MyItems时,您都会创建一个新列表。尝试创建一次,然后使用可观察的集合。。我在这件事上浪费了太多时间。。真是个小问题。。谢谢。您可以将其添加到应答中。每次绑定机制将请求MyItems时,您都将创建一个新列表。尝试创建一次,然后使用可观察的集合。。我在这件事上浪费了太多时间。。真是个小问题。。谢谢。你可以在答案中加上它。。
private List<MyModel> _myItems;
public IList<MyModel> MyItems
{
    get
    {
        if (_myItems == null)
        {
            myItems = new List<MyModel>();
            myItems.Add(new MyModel() { Name = "A" });
            myItems.Add(new MyModel() { Name = "B" });
            myItems.Add(new MyModel() { Name = "C" });
        }
        return _myItems}
    }
}