在Silverlight MVVM的组合框中更改选定项时引发属性更改

在Silverlight MVVM的组合框中更改选定项时引发属性更改,silverlight,mvvm,Silverlight,Mvvm,当组合框中选定的项发生更改时,如何更改组合框中的属性更改。实际上,我想要的是当在一个组合框中选择的值发生更改时 根据选择的值,将填充其他combox。 我已执行INotifyProperty接口,即使在选择其他值时,也不会执行属性的设置块 让我用一个不同的例子来详细说明一下:- 有两个combobox和一个textblock,这两个combobox都包含城市名称,因此当用户在第二个combobox中选择城市时,应该调用一个方法,该方法将给出textblock中两个城市之间的距离,我使用MVVM来

当组合框中选定的项发生更改时,如何更改组合框中的属性更改。实际上,我想要的是当在一个组合框中选择的值发生更改时 根据选择的值,将填充其他combox。 我已执行INotifyProperty接口,即使在选择其他值时,也不会执行属性的设置块

让我用一个不同的例子来详细说明一下:- 有两个combobox和一个textblock,这两个combobox都包含城市名称,因此当用户在第二个combobox中选择城市时,应该调用一个方法,该方法将给出textblock中两个城市之间的距离,我使用MVVM来实现这一点。
问题是我无法调用第二个combobox的set块(从这里我将调用给出距离的方法)

如果使用MVVM,则需要将SelectedItem绑定到代码隐藏或ViewModel中的属性,确保绑定是双向的,并且属性实现INotifyPropertyChanged:

<ComboBox Name="ComboBox1" ItemsSource="{Binding Items}" 
          SelectedItem="{Binding Path=SelectedItem,Mode=TwoWay}" 
          DisplayMemberPath="TextProp" >

public Collection<ItemClass> Items
{
     get
     {
          return _items;
     }
     private set
     {
           if (value != _items)
           {
                _items = value;
                RaisePropertyChanged("Items");
           }
     }
 }

 public ItemClass SelectedItem
 {
      get
      {
          return _selectedItem;
      }
      set
      {
           if (value != _selectedItem)
           {
                _selectedItem = value;
                RaisePropertyChanged("SelectedItem");
           }
      }
  }

公众收集物品
{
得到
{
退货(物品);;
}
专用设备
{
如果(值!=\u项)
{
_项目=价值;
增加财产变更(“项目”);
}
}
}
公共项类SelectedItem
{
得到
{
返回_selectedItem;
}
设置
{
如果(值!=\u选择编辑项)
{
_选择editem=值;
RaisePropertyChanged(“SelectedItem”);
}
}
}

如果使用MVVM,则需要将SelectedItem绑定到代码隐藏或ViewModel中的属性,确保绑定是双向的,并且属性实现INotifyPropertyChanged:

<ComboBox Name="ComboBox1" ItemsSource="{Binding Items}" 
          SelectedItem="{Binding Path=SelectedItem,Mode=TwoWay}" 
          DisplayMemberPath="TextProp" >

public Collection<ItemClass> Items
{
     get
     {
          return _items;
     }
     private set
     {
           if (value != _items)
           {
                _items = value;
                RaisePropertyChanged("Items");
           }
     }
 }

 public ItemClass SelectedItem
 {
      get
      {
          return _selectedItem;
      }
      set
      {
           if (value != _selectedItem)
           {
                _selectedItem = value;
                RaisePropertyChanged("SelectedItem");
           }
      }
  }

公众收集物品
{
得到
{
退货(物品);;
}
专用设备
{
如果(值!=\u项)
{
_项目=价值;
增加财产变更(“项目”);
}
}
}
公共项类SelectedItem
{
得到
{
返回_selectedItem;
}
设置
{
如果(值!=\u选择编辑项)
{
_选择editem=值;
RaisePropertyChanged(“SelectedItem”);
}
}
}

我正在执行您在这里编写的操作,我正在使用VIsual studio 2010对其进行调试,当我更改combobox的值时,调试器不会转到selectedItem属性的set块。。。因此无法获得所需的结果。SelectedItem上的绑定确实有效吗?也就是说,如果在代码中以编程方式进行设置,UI是否会更新?上述答案的问题是绑定顺序错误;首先应该设置ItemsSource属性,然后设置SelectedItem属性,而不是相反<代码>我正在做您在这里写的事情,我正在使用VIsual studio 2010调试它,当我更改combobox的值时,调试器不会转到selectedItem属性的set块。。。因此无法获得所需的结果。SelectedItem上的绑定确实有效吗?也就是说,如果在代码中以编程方式进行设置,UI是否会更新?上述答案的问题是绑定顺序错误;首先应该设置ItemsSource属性,然后设置SelectedItem属性,而不是相反<代码>