Xaml 编译绑定和常规绑定在行为上的奇怪差异

Xaml 编译绑定和常规绑定在行为上的奇怪差异,xaml,mvvm,data-binding,uwp,xbind,Xaml,Mvvm,Data Binding,Uwp,Xbind,我正在尝试创建一个带有ToggleMenuFlyoutItems的MenuFlyout,其中在任何给定时刻都只检查一个切换。切换对应于ToggleViewModels,将切换的IsChecked属性绑定到ToggleViewModel的IsSelected属性。因为我想在每次选中新切换时取消选中以前选中的切换,所以我将IsSelected属性的设置传递给保存ToggleViewModels集合的MainViewModel 带有在MainPage.xaml中定义的弹出按钮 MainPageVi

我正在尝试创建一个带有ToggleMenuFlyoutItems的MenuFlyout,其中在任何给定时刻都只检查一个切换。切换对应于ToggleViewModels,将切换的IsChecked属性绑定到ToggleViewModel的IsSelected属性。因为我想在每次选中新切换时取消选中以前选中的切换,所以我将IsSelected属性的设置传递给保存ToggleViewModels集合的MainViewModel

带有在MainPage.xaml中定义的弹出按钮


MainPageViewModel:

公共类MainViewModel:BindableBase { 公共主视图模型() { ToggleCollection=新的ObservableCollection(); var selectToggleAction=新操作(param=>SetToggleSelection(param)); 对于(int i=0;i<3;i++) { 添加(新的ToggleViewModel($“Item{i}”,selectToggleAction)); } } public observeCollection ToggleCollection{get;private set;} 私有void SetToggleSelection(ToggleViewModel切换) { var selectedToggle=ToggleCollection.SingleOrDefault(t=>t.IsSelected); 如果(selectedToggle!=切换) { selectedToggle?.SetSelection(假); toggle.SetSelection(true); } } } 切换视图模型:

public类ToggleViewModel:BindableBase
{
私人行动——选择收集行动;
私立学校当选;
公共切换视图模型(字符串名称、操作)
{
名称=名称;
_选择TogleAction=action;
}
公共字符串名称{get;set;}
公选学校
{
获取{return}isSelected;}
设置
{
如果(_isSelected!=值)
{
_选择TogCollection(此项);
base.OnPropertyChanged();
}
}
}
公共选举(选择布尔)
{
_isSelected=已选择;
基于财产变更(“IsSelected”);
}
}
现在,上面所有的代码都工作得很好。当我尝试使用常规绑定而不是编译绑定时,会出现问题:

<ToggleMenuFlyoutItem 
    Text="{Binding ToggleCollection[0].Name}"
    IsChecked="{Binding ToggleCollection[0].IsSelected, Mode=TwoWay}" />

像这样绑定属性,我突然可以取消选中当前选中的切换,这样就不会选择任何属性。这是因为当我在IsSelected属性的setter中引发OnPropertyChanged时,IsSelected属性的getter没有被调用(使用常规绑定的原因是我想在代码隐藏中动态创建切换,但为了说明问题XAML也可以工作)


有人能解释一下为什么本例中的
{x:Bind}
有效,而
{Binding}
无效吗?

什么是
\u selectedItem
?还有什么是
ListItemViewModel
?你能分享一个能重现你的问题的例子吗?@JayZuo MSFT感谢你的反馈。我对变量和类的命名做了一些更改,希望能让事情变得更清楚。您的常规绑定是什么样子的?
{Binding}
甚至支持索引吗?@HenkHolterman常规绑定:{Binding ToggleCollection[0]。IsSelected,Mode=TwoWay}-前提是您已将MainPageViewModel设置为DataContext。索引没有问题。
\u selectTogCollection
如何指向
MainViewModel
中的私有方法?我还建议你提供一份工作。根据当前的信息,很难重现您的问题。