第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在類對象的設(shè)置器中實現(xiàn)RaiseCanExecuteChanged方法

在類對象的設(shè)置器中實現(xiàn)RaiseCanExecuteChanged方法

C#
瀟湘沐 2021-05-04 15:49:25
我仍然不確定我的方法是否正確,但是為了實現(xiàn)MVVM模式,我以以下方式創(chuàng)建了模型類“ Test”:public class Test : BindableBase{    private int testNumber;    public int TestNumber    {        get { return testNumber; }        set { SetProperty(ref testNumber, value) }    }    ...}然后,我在我的類中創(chuàng)建了此類的實例ViewModel:class ViewModel : BindableBase{    private Test testVM;    public Test TestVM    {        get { return testVM; }        set { SetProperty(ref testVM, value); }    }    ...在XAML的代碼中,View我Test通過TestVM屬性綁定了該類的所有屬性。盡管這可以正常工作,但是在嘗試實現(xiàn)時遇到了一個問題DelegateCommad。    public DelegateCommand StartTestCommand { get; private set; }到目前為止,在實現(xiàn)DelegateCommands時,如果我想CanExecute在屬性更改時觸發(fā)該方法,則可以將其包含DelegateCommand.RaiseCanExecuteChanged()在屬性的setter中。像這樣:    ...    private bool duringTest;    public bool DuringTest    {        get { return duringTest; }        set        {            SetProperty(ref duringTest, value);            StartTestCommand.RaiseCanExecuteChanged();        }    }    ...這對于在中聲明的屬性工作正常ViewModel,但是對這些Test屬性使用相同的方法時,它將不再起作用。    ...    private Test testVM;    public Test TestVM    {        get { return testVM; }        set        {            SetProperty(ref testVM, value);            StartTestCommand.RaiseCanExecuteChanged();        }    }}我希望每次TestVM更改from的屬性時,都會調(diào)用setter,但是會直接更新模型。我究竟做錯了什么?在中使用Model對象時正確的方法是ViewModel什么?
查看完整描述

1 回答

?
GCT1015

TA貢獻1827條經(jīng)驗 獲得超4個贊

更改對象的屬性值不會更改對象的引用。


聲明這個


public Test TestVM

{

    get { return testVM; }

    set

    {

        SetProperty(ref testVM, value);

        StartTestCommand.RaiseCanExecuteChanged();

    }

}

您基本上是在告訴編譯器:TestVM更改對對象的引用(甚至更改為相同的值)時,請更新StartTestCommand的狀態(tài)。


但是很明顯,一旦分配了該對象,就不會更改對該對象的引用。


如果您希望ViewModel在某些子視圖模型的(Test)屬性更改時更新父視圖模型()中的命令,則可以使用以下PropertyChanged事件:


public Test TestVM

{

    get { return testVM; }

    set

    {

        Test oldValue = testVM;

        if (SetProperty(ref testVM, value))

        {

            if (oldValue != null)

            {

                oldValue.PropertyChanged -= TestPropertyChanged;

            }


            if (testVM!= null)

            {

                testVM.PropertyChanged += TestPropertyChanged;

            }

        }

    }

}


void TestPropertyChanged(object sender, PropertyChangedEventArgs e)

{

    // filter if necessary

    if (e.PropertyName == "...")

    {

        StartTestCommand.RaiseCanExecuteChanged();

    }

}


查看完整回答
反對 回復(fù) 2021-05-16
  • 1 回答
  • 0 關(guān)注
  • 355 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號