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

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

遵循 MVVM 模式,如何創(chuàng)建一個“設(shè)置”函數(shù)來設(shè)置其他用戶控件中的數(shù)據(jù)綁定項值?

遵循 MVVM 模式,如何創(chuàng)建一個“設(shè)置”函數(shù)來設(shè)置其他用戶控件中的數(shù)據(jù)綁定項值?

C#
ibeautiful 2021-06-01 09:53:07
我的問題的簡化版本:我有兩個簡單的用戶控件 Apple 和 Banana(視圖),它們各自包含 2 個屬性的相應(yīng)視圖模型。我還有一個 ListBox 作為 Apple 和 Banana 屬性的“設(shè)置”。蘋果:<UserControl>      <StackPanel Orientation="Horizontal">          <TextBlock Margin="0,0,20,0" Text="{Binding AppleID}"/>          <TextBlock Text="{Binding Size}"/>      </StackPanel>  </UserControl>  香蕉:<UserControl>      <StackPanel Orientation="Horizontal">        <TextBlock Margin="0,0,20,0"  Text="{Binding BananaID}"/>        <TextBlock Text="{Binding Length}"/>    </StackPanel></UserControl>  蘋果虛擬機:public class AppleViewModel : Notifier{    private string appleID;    public string AppleID    {        get => appleID; set        {            appleID = value;            OnPropertyChanged("AppleID");        }    }    private int size;    public int Size    {        get => size; set        {            size = value;            OnPropertyChanged("Size");        }    }}香蕉虛擬機:public class BananaViewModel : Notifier{    private string bananaID;    public string BananaID    {        get => bananaID; set        {            bananaID = value;            OnPropertyChanged("BananaID");        }    }    private int length;    public int Length    {        get => length; set        {            length = value;            OnPropertyChanged("Length");        }    }}主窗口如下所示:<Window>    <StackPanel Orientation="Vertical">        <local:AppleControlxaml x:Name="apple"/>        <local:BananaControl x:Name="banana"/>        <ListBox>        </ListBox>    </StackPanel></Window>為了更快地設(shè)置,我在主窗口后面的代碼中分配了 DataContext。在實際情況中,我使用了窗口視圖模型。現(xiàn)在我希望 listBox 控件顯示并允許用戶設(shè)置正在聚焦的用戶控件的屬性值。典型的交互是 Select/Mousedown Apple user control area -> Change length in listbox -> See that apple user control values changed。如果用戶選擇/鼠標按下 Banana 用戶控件,他/她應(yīng)該也可以這樣做。問題是:如何使用 MVVM 和數(shù)據(jù)綁定來實現(xiàn)此設(shè)置功能?我嘗試為要綁定到的視圖框的 ItemsSource 創(chuàng)建一個 ObservableCollection,但是如何確保集合正確更新蘋果視圖模型?
查看完整描述

1 回答

?
陪伴而非守候

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

我會根據(jù)我從你的問題中了解到的給你我的想法。


主窗口.xaml.cs


    public partial class MainWindow : Window

{

    private AppleViewModel appleViewModel;

    public AppleViewModel AppleViewModel

    {

        get

        {

            return this.appleViewModel;

        }

        set

        {

            if (this.appleViewModel != value)

            {

                this.appleViewModel = value;

            }

        }

    }


    private BananaViewModel bananaViewModel;

    public BananaViewModel BananaViewModel

    {

        get

        {

            return this.bananaViewModel;

        }

        set

        {

            if (this.bananaViewModel != value)

            {

                this.bananaViewModel = value;

            }

        }

    }



    public MainWindow()

    {

        InitializeComponent();


        this.AppleViewModel = new AppleViewModel();

        this.AppleViewModel.AppleID = "Apple001";

        this.AppleViewModel.Size = 10;


        this.BananaViewModel = new BananaViewModel();

        this.BananaViewModel.BananaID = "Banana001";

        this.BananaViewModel.Length = 10;


        apple.DataContext = this.AppleViewModel;


        banana.DataContext = this.BananaViewModel;


        ObservableCollection<int> sizes = new ObservableCollection<int>();

        for (int i = 0; i < 10; i++)

        {

            sizes.Add(i);

        }


        ListBox.ItemsSource = sizes;


    }


    private void ListBox_OnSelectionChanged(object sender, SelectionChangedEventArgs e)

    {

        if (this.AppleViewModel.IsSelected)

        {

            this.AppleViewModel.Size = (int)ListBox.SelectedItem;

        }

        if (this.BananaViewModel.IsSelected)

        {

            this.BananaViewModel.Length = (int)ListBox.SelectedItem;

        }

    }

}

主窗口.xaml


 <StackPanel Orientation="Vertical">

        <wpfApplication4:AppleControlxaml x:Name="apple"/>

        <wpfApplication4:BananaControl x:Name="banana"/>

        <ListBox SelectionChanged="ListBox_OnSelectionChanged" x:Name="ListBox">

        </ListBox>

    </StackPanel>

您的水果虛擬機應(yīng)該有一個名為 IsSelected 的新屬性,例如:


private bool isSelected;

    public bool IsSelected

    {

        get

        {

            return this.isSelected;


        }

        set

        {

            this.isSelected = value;

            OnPropertyChanged("IsSelected");

        }

    }

你的水果控制也應(yīng)該有這個


<CheckBox IsChecked="{Binding IsSelected}"/>

如果您不想使用此復選框控件,請告訴我,我會嘗試找到更準確的答案


編輯以澄清您的編輯(xD):


假設(shè)您已經(jīng)使用其 Value 和 Description 屬性創(chuàng)建了“SettingsVM”。現(xiàn)在您想在 ListBox 上顯示您選擇的水果設(shè)置。所以讓我們走吧...每次你的水果改變時,你的 SettingsVM 的屬性也必須改變才能顯示正確的水果。在您的“banana1_MouseDown”或“apple1_MouseDown”中,您必須使用它們的屬性初始化您的 SettingsVM,以便您可以創(chuàng)建一個方法來執(zhí)行此操作。


private void InitializeSettingsVM(int value, string description)

    {

      //Same like you do when you initialize your Banana/AppleVM in your MainWindow initialize.

      this.SettingsVM.Value = value;

      this.SettingsVM.Description = description;

    }

在您的banana1_MouseDown/apple1_MouseDown 中,您應(yīng)該執(zhí)行以下操作:


private void banana1_MouseDown(whateveryouhavehere)

   {

     //Whatever you do here

     this.InitializeSettingsVM(this.BananaViewModel.Length,this.BananaViewModel.BananaID);

   }


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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