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

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

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

      C# WPF CommunityToolkit.MVVM (測試一)

      MainWindow.xaml

      <Window x:Class="CommunityToolkit.MVVM_RelayCommand_測試.MainWindow"
              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
              xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
              xmlns:local="clr-namespace:CommunityToolkit.MVVM_RelayCommand_測試"
              mc:Ignorable="d"
              Title="MainWindow" Height="150" Width="200">
          <StackPanel>
              <Button Width="150" Height="30" Margin="0 30 0 0" Command="{Binding IncrementCounterCommand}" >click</Button>
              <TextBlock Width="150" Height="30" Text="{Binding Counter}"></TextBlock>
          </StackPanel>
      </Window>

      MainWindow.cs

      using System.Diagnostics.Metrics;
      using System.Text;
      using System.Windows;
      using System.Windows.Controls;
      using System.Windows.Data;
      using System.Windows.Documents;
      using System.Windows.Input;
      using System.Windows.Media;
      using System.Windows.Media.Imaging;
      using System.Windows.Navigation;
      using System.Windows.Shapes;
      

      namespace CommunityToolkit.MVVM_RelayCommand_測試
      {
      /// <summary>
      /// Interaction logic for MainWindow.xaml
      /// </summary>
      public partial class MainWindow : Window
      {
      public MainWindow()
      {
      InitializeComponent();
      DataContext
      = new MainWindowViewModel();
      }
      }
      }

      MainWindowViewModel.cs

      using CommunityToolkit.Mvvm.ComponentModel;
      using CommunityToolkit.Mvvm.Input;
      using System;
      using System.Collections.Generic;
      using System.Diagnostics.Metrics;
      using System.Linq;
      using System.Text;
      using System.Threading.Tasks;
      using System.Windows.Input;
      
      namespace CommunityToolkit.MVVM_RelayCommand_測試
      {
          internal partial class MainWindowViewModel:ObservableObject
          {
              [ObservableProperty]
              private int _counter;
              public RelayCommand IncrementCounterCommand { get; }
             
              private void IncrementCounter()
              {
                  Counter++;
                  IncrementCounterCommand.NotifyCanExecuteChanged();
              } 
              public MainWindowViewModel()
              {
                  IncrementCounterCommand = new RelayCommand(IncrementCounter, CanExecute);
              }
      
              private bool CanExecute()
              {           
                  return Counter <= 3;
              }
          }
      }
      
      

      1、初步使用 CommunityToolkit.MVVM 中的RelayCommand

      2、通過屬性的變更來改變按鈕的狀態。

       

       

      以下是deepseek的糾錯信息:

      你的代碼中,按鈕的 `IsEnabled` 綁定到了 `IncrementCounterCommand.CanExecute`,但這里存在幾個問題:

      問題分析:

      1. RelayCommand.CanExecute 不是一個可綁定的屬性
        RelayCommandCanExecute 是一個方法(通過 ICommand.CanExecute 實現),而不是一個可綁定的屬性(如 INotifyPropertyChanged 屬性)。因此,當 CanExecute() 的返回值改變時,UI 無法自動收到通知。

      2. 沒有通知機制更新按鈕狀態
        Counter 改變時,你需要手動調用 IncrementCounterCommand.NotifyCanExecuteChanged(),這樣按鈕才會重新查詢 CanExecute() 方法并更新狀態(啟用/禁用)。但你的代碼中并沒有在 Counter 改變時觸發通知。

      解決方案:

      方案1:使用 [RelayCommand] 特性(推薦)

      CommunityToolkit.Mvvm 提供了 [RelayCommand] 特性,可以自動生成命令,并支持自動通知 CanExecute 變化。你只需要在方法上添加 [RelayCommand] 并指定 CanExecute 方法名即可。

      修改 MainWindowViewModel.cs

      using CommunityToolkit.Mvvm.ComponentModel;
      using CommunityToolkit.Mvvm.Input;
      using System.Windows.Input;
      
      namespace CommunityToolkit.MVVM_RelayCommand_測試
      {
          internal partial class MainWindowViewModel : ObservableObject
          {
              [ObservableProperty]
              private int _counter;
      
              // 使用 [RelayCommand] 特性自動生成命令,并指定 CanExecute 方法
              [RelayCommand(CanExecute = nameof(CanExecute))]
              private void IncrementCounter() => Counter++;
      
              private bool CanExecute() => Counter <= 3;
      
              // 當 Counter 改變時,通知命令的 CanExecute 可能已改變
              partial void OnCounterChanged(int value)
              {
                  // 通知命令重新檢查 CanExecute
                  IncrementCounterCommand.NotifyCanExecuteChanged();
              }
          }
      }
      

      方案2:手動調用 NotifyCanExecuteChanged

      如果你不想使用特性,可以在 Counter 的 setter 中手動通知命令狀態變化(但你已經使用了 [ObservableProperty],所以可以通過部分方法 OnCounterChanged 來實現)。

      修改 XAML 綁定:

      你不需要綁定 IsEnabled,因為 ICommand 本身就會控制按鈕的啟用狀態。只需移除 IsEnabled 綁定:

      <Button Width="150" Height="30" Margin="0 30 0 0" 
              Command="{Binding IncrementCounterCommand}">click</Button>
      

      總結:

      • 使用 [RelayCommand] 特性簡化命令定義。
      • Counter 變化時調用 NotifyCanExecuteChanged()。
      • 不需要手動綁定 IsEnabled,因為 ICommand 會自動管理按鈕狀態。

      修改后,當 Counter 超過 3 時,按鈕會自動禁用(變為灰色)。

      posted @ 2025-09-21 16:56  竹樓風雨聲  閱讀(28)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 日本中文字幕不卡在线一区二区| 国内综合精品午夜久久资源| 最近2019免费中文字幕8| 亚洲国产精品日韩在线 | 亚洲国产欧美不卡在线观看| 色老头亚洲成人免费影院| 国产男女猛烈无遮挡免费视频网站 | 亚洲一区二区三区在线播放无码 | 2019亚洲午夜无码天堂| 特级毛片a片久久久久久| 免费看视频的网站| 亚洲精品成人久久av| 五十路丰满中年熟女中出| 久久夜色精品久久噜噜亚| 国产成人精品亚洲资源| 免费高清特级毛片A片| 国精品午夜福利不卡视频| 嫩草研究院久久久精品| julia无码中文字幕一区| 日韩中文字幕免费在线观看| 亚洲精品综合网二三区| 五月花成人网| 四虎国产精品成人免费久久| 国产精品自拍午夜福利| jizzjizz日本高潮喷水| 又粗又硬又黄a级毛片| 国产一区二区日韩在线| 日韩精品亚洲 国产| 久久国产精品亚洲精品99| 亚洲综合91社区精品福利| 悠悠色成人综合在线观看| 国产福利在线观看免费第一福利| 99精品国产在热久久无| 欧美区一区二区三区| 国产线播放免费人成视频播放| 国产精品午夜福利清纯露脸| 夜夜添狠狠添高潮出水| 亚洲一区二区三区18禁| 久久午夜无码免费| 丁香婷婷色综合激情五月| 福利一区二区在线视频|