gpt4 book ai didi

c# - Prism 6 DelegateCommand Observes属性代码

转载 作者:太空狗 更新时间:2023-10-29 20:20:00 30 4
gpt4 key购买 nike

嗨,你好,我是 WPF 和 MVVM 设计模式的新手,我从 PRISM 的 BRIAN LAGUNAS 爵士的博客和视频中学到了很多东西..但只想问一个菜鸟问题..有什么问题我的代码对我有用...非常感谢任何帮助。这是我的代码:

我的 View 模型

public class Person : BindableBase
{
private myPErson _MyPerson;
public myPErson MyPerson
{
get { return _MyPerson; }
set
{
SetProperty(ref _MyPerson, value);
}
}

public Person()
{
_MyPerson = new myPErson();
updateCommand = new DelegateCommand(Execute, CanExecute).ObservesProperty(() => MyPerson.FirstName).ObservesProperty(() => MyPerson.Lastname);

// updateCommand = new DelegateCommand(Execute).ObservesCanExecute((p) => CanExecute); /// JUST WANNA TRY THIS BUT DUNNO HOW
}

private bool CanExecute()
{
return !String.IsNullOrWhiteSpace(MyPerson.FirstName) && !String.IsNullOrWhiteSpace(MyPerson.Lastname);
}

private void Execute()
{
MessageBox.Show("HOLA");
}

public DelegateCommand updateCommand { get; set; }
}

我的模型

声明到另一个类文件

public class myPErson : BindableBase
{
private string _firstName;
public string FirstName
{
get { return _firstName; }
set
{
SetProperty(ref _firstName, value);
}
}

private string _lastname;
public string Lastname
{
get { return _lastname; }
set
{
SetProperty(ref _lastname, value);
}
}
}

查看Xaml代码

<Window x:Class="Prism6Test.Views.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:myVM="clr-namespace:Prism6Test.ViewModel"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<myVM:Person x:Key="mainVM"/>
</Window.Resources>
<Grid DataContext="{StaticResource mainVM}">
<TextBox HorizontalAlignment="Left" Height="23" Margin="217,103,0,0" TextWrapping="Wrap" Text="{Binding MyPerson.FirstName,UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Top" Width="120"/>
<TextBox HorizontalAlignment="Left" Height="23" Margin="217,131,0,0" TextWrapping="Wrap" Text="{Binding MyPerson.Lastname,UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Top" Width="120"/>
<Button Content="Button" Command="{Binding updateCommand}" HorizontalAlignment="Left" Margin="242,159,0,0" VerticalAlignment="Top" Width="75"/>

</Grid>
</Window>

我已经读过这篇文章,但它对我不起作用..并且无法理解我该如何正确编码..请帮我解决这个问题..希望尽快得到任何回复..thx

ObservesProperty method isn't observing model's properties at Prism 6

最佳答案

1) 你不能随心所欲地使用复杂的数据模型,所以试试吧

private myPErson _MyPerson;
public myPErson MyPerson
{
get { return _MyPerson; }
set
{
if (_MyPerson != null)
_MyPerson.PropertyChanged -= MyPersonOnPropertyChanged;

SetProperty(ref _MyPerson, value);


if (_MyPerson != null)
_MyPerson.PropertyChanged += MyPersonOnPropertyChanged;
}
}

private void MyPersonOnPropertyChanged(object sender, PropertyChangedEventArgs propertyChangedEventArgs)
{
updateCommand.RaiseCanExecuteChanged();
}

2) 改变你的构造函数

public Person()
{
MyPerson = new myPErson();
updateCommand = new DelegateCommand(Execute, CanExecute);
}

关于c# - Prism 6 DelegateCommand Observes属性代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33624193/

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