<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      [WPF]XAML中使用IMultiValueConverter實(shí)現(xiàn)Command的多參數(shù)傳參

      問題

      如何對(duì)ICommand傳入多個(gè)參數(shù)?

      背景

      最近在做一個(gè)WPF的開發(fā),有多個(gè)相近的功能寫了不同的Command,因?yàn)橐獙?duì)應(yīng)不同的對(duì)象。因?yàn)槭荂trlCV,顯得代碼有點(diǎn)冗贅不夠優(yōu)雅,但是ICommand又只能接受一個(gè)參數(shù)。

      思路

      使用MultiBinding,對(duì)CommandParameter進(jìn)行綁定,然后再使用IMultiValueConverter對(duì)多個(gè)參數(shù)進(jìn)行轉(zhuǎn)換,變成object傳進(jìn)去

      代碼實(shí)現(xiàn)

      1. 實(shí)現(xiàn)IMultiValueConverter
      public class MultiValueConverter:IMultiValueConverter{
          public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
          {
              object[] args = new object[values.Length];
              values.CopyTo(args, 0); 
              //要重新創(chuàng)建values的實(shí)例,否則參數(shù)傳過去是空引用
              return args;
          }
      
          public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
          {
              throw new NotImplementedException();
          }
      }
      
      1. 在XAML里實(shí)現(xiàn)綁定
      <Page.Resource>
          <cvt:MultiValueConverter x:Key="commandParameterConverter">
      </Page.Resource>
      ...
      <Button
          Command="{Binding StartCommand}"
          Content="Start">
          <Button.CommandParameter>
              <MultiBinding Converter="{StaticResource commandParameterConverter}">
                  <Binding Path="DataContext.Path1" RelativeSource="{RelativeSource AncestorType=local:HomePage}" />
              </MultiBinding>
          </Button.CommandParameter>
      </Button>
      
      1. 在ViewModel中的處理邏輯
      public class HomePageViewModel:ObservableObject{
          public string Path1 {get;set;}
      
          [RelayCommand]
          private async Task Start(object arg){
              if(object is not object[] args || args[0] is not string path){
                  throw new Exception("Invalid argument type");
              }
      
              //Do Something else...
          }
      }
      
      1. 亦可以使用Tuple進(jìn)行傳參
        僅展示TupleConverter啦,其余大體差不多
      public class TupleConverter:IMultiValueConverter{
           public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
          {
              return Tuple.Create(values[0],values[1],values[2]);
          }
      
          public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
          {
              throw new NotImplementedException();
          }
      }
      
      posted @ 2024-09-14 17:01  Echo_HR910  閱讀(198)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 亚洲av日韩在线资源| 欧洲免费一区二区三区视频| 久久久久久伊人高潮影院| 欧美牲交videossexeso欧美| 久久国产国内精品国语对白| 午夜精品福利亚洲国产| 国产高清精品在线91| 国产日产免费高清欧美一区| 亚洲成av人片色午夜乱码| 国内自拍av在线免费| 国产一区二区av天堂热| 激情一区二区三区成人文| 色综合久久久久综合体桃花网| 亚洲欧美人成人综合在线播放 | 午夜成人精品福利网站在线观看| 久热这里有精品免费视频| 色爱综合另类图片av| 午夜国产精品福利一二| 国产精品中文字幕一二三| 成人性能视频在线| 国产成人8x视频网站入口| 人妻系列中文字幕精品| 久久精品国内一区二区三区| 日韩无码视频网站| 一区二区三区鲁丝不卡| 激情国产一区二区三区四| 激情综合色综合久久综合| 国产成人综合久久精品下载| 97se亚洲国产综合自在线观看| 国产精品成人高潮av| 最新国产精品亚洲| 熟女女同亚洲女同中文字幕| 亚洲日韩精品无码av海量| 国产不卡精品视频男人的天堂| 亚洲天堂成人网在线观看| 色色97| 国产亚洲精品自在久久vr| 红桃视频成人传媒| 国产精品亚洲国际在线看| 伊人久久大香线蕉网av| 国产一区二区精品自拍|