UWP:转换和转换回值转换器是如何工作的?

UWP:转换和转换回值转换器是如何工作的?,uwp,uwp-xaml,Uwp,Uwp Xaml,我有一个扩展器控件,一次只能打开一个扩展器。如果用户单击一个扩展器,另一个扩展器将崩溃。代码如下: 我有一个Converter.cs文件,其中包含以下代码 public class OppositeConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, string language) { return !(bool)value; } pu

我有一个扩展器控件,一次只能打开一个扩展器。如果用户单击一个扩展器,另一个扩展器将崩溃。代码如下:

我有一个Converter.cs文件,其中包含以下代码

public class OppositeConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{

    return !(bool)value;
}

public object ConvertBack(object value, Type targetType, object parameter, string language)
{
    return !(bool)value;
}
}
我有一个MainPageViewModel.cs文件,其中包含以下代码:

public class MainPageViewModel
{
   public MainPageViewModel()
{

}
   private bool _isExpend;


   public bool IsExpend
   {
    get
    {
        return _isExpend;
    }
    set
    {
        _isExpend = value;
        RaisePropertyChanged(nameof(isExpend));
    }
}
}

我有一个MainPage.xaml文件

 <Page.DataContext>
    <local:MainPageViewModel x:Name="ViewModel" />
</Page.DataContext>
 <Page.Resources>
        <local:OppositeConverter x:Key="OppositeConverter" />
  </Page.Resources>
 <StackPanel>
      <controls:Expander
       x:Name="Expander1"
       Content = "Expander 1 content"
       IsExpanded="{x:Bind IsExpend, Converter={StaticResource OppositConverter},Mode=TwoWay}">
   </controls:Expander>

   <controls:Expander
       x:Name="Expander2"
       Content = "Expander 2 content"
       IsExpanded="{x:Bind IsExpend, Mode=TwoWay}">
   </controls:Expander>     
</StackPanel>

我可以得到帮助了解转换器如何在这里工作吗?何时调用convert,何时调用convertback?为什么只有第一个扩展器使用转换器而不是第二个?如果您能帮助我理解这段代码的流程,我将不胜感激

何时调用convert,何时调用convertback

OppositeConverter
类允许您通过继承
IValueConverter
在源和目标之间转换数据格式。单击控件以更改状态时,我们使用
OppositeConverter
将另一个控件的状态值设置为相反的值

单击第二个控件时,将调用
Convert
方法。工作流程如下所示:

  • 单击第二个控件将其展开或折叠,第二个控件的
    \u isExpend
    值将被更改,并且将调用
    RaisePropertyChanged
    方法来通知值已更改
  • 第一个控件通过调用
    Convert
    方法获得第二个控件的
    \u isExpend
    的相反值,这使得第一个控件的折叠或扩展状态与第二个控件相反
  • 单击第一个控件时,将调用
    ConvertBack
    方法。工作流程如下所示:

  • 单击第一个控件以展开或折叠它,将调用
    ConvertBack
    方法以获取相反的值
    \u isExpend
  • 将调用
    RaisePropertyChanged
    方法来通知值已更改,并且第二个控件将获得与第一个控件的
    \isExpend
    值相反的
    \isExpend
  • 为什么只有第一个扩展器使用转换器而不是第二个

    一个转换器可以将另一个控件的值反转一次,这正是我们所需要的。如果在两个控件中都使用它,则两个转换器将使两个控件的值相同,并且当您单击其中一个控件时,两个控件的状态将保持不变