gpt4 book ai didi

wpf - 更改 MVVM-WPF 中文本 block 的背景颜色(并保留它)

转载 作者:行者123 更新时间:2023-12-03 10:24:04 25 4
gpt4 key购买 nike

这是我的工作代码:当我单击按钮(但持续一微秒)时,文本和背景颜色属性会发生变化,然后设置回默认文本/颜色。似乎 RaisePropertyChanged 被一次又一次地触发。有人可以帮助指出我做错了什么吗?

MainWindow.xaml 代码

 <Window x:Class="BuiltIn_Custom_Commands_Eg.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<StackPanel HorizontalAlignment="Center">
<TextBlock Text="{Binding txtblck_text, StringFormat=Default: {0}}" Padding="10" FontStyle="Italic" Background="{Binding txtblck_color}"/>
<Button Content="Change Color" Width="100" Height="30" Margin="20" Command="{Binding OkCommand}" />
</StackPanel>
</Grid>

View 模型代码:
class Example_ViewModel : ViewModelBase
{
#region Properties
private string _txtblck_text;
private Brush _txtblck_color;
public ICommand OkCommand {get; set;}

public string txtblck_text
{
get { return _txtblck_text; }
set
{
_txtblck_text = value;
RaisePropertyChanged("txtblck_text");
}
}

public Brush txtblck_color
{
get { return _txtblck_color; }
set
{
_txtblck_color = value;
RaisePropertyChanged("txtblck_color");
}
}
#endregion

#region Constructor
public Example_ViewModel()
{
OkCommand = new myCommand(myOkExecute, myCanOkExecute);
}
#endregion

private void myOkExecute(object parameter)
{
txtblck_color = Brushes.CadetBlue;
//RaisePropertyChanged("txtblck_color");

txtblck_text = "You Clicked me!!!";
//RaisePropertyChanged("txtblck_text");
}

private bool myCanOkExecute(object parameter)
{
txtblck_color = Brushes.Yellow;
txtblck_text = "You havent clicked me!!!";
return true;
}
}

最佳答案

每当绑定(bind)发生变化时,都会并且应该调用 CanExecute 方法。因此,更改 Execute 方法中的绑定(bind)(颜色)将导致 CanExecute 再次被调用。

相反,为什么不在构造函数中初始化颜色私有(private)成员一次,如下所示。

public Example_ViewModel()
{
OkCommand = new myCommand(myOkExecute, myCanOkExecute);
_txtblck_color = = Brushes.Yellow;
}

请注意,对于 text 属性也是如此。通常,所有属性私有(private)成员都应在初始化(构造函数)时设置默认值,因为这样可以避免对 INotifyPropertyChanged 的​​不必要调用。

此外,为了测试代码的行为方式并确认这一点,只需在 CanExecute 方法中设置一些断点,以查看程序流的行为方式。

关于wpf - 更改 MVVM-WPF 中文本 block 的背景颜色(并保留它),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12012167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com