【发布时间】:2020-04-20 18:42:54
【问题描述】:
我正在尝试使用 XamarinForms 了解 MVVM,但我对功能的正确分区有点困惑:
我有一个主页 MainPage.xaml,其中包括一个堆栈布局:
<StackLayout x:Name="MainPageStackLayout">
...
</StackLayout>
在这个 stacklayout 中我有 Picker,它的绑定如下:
<Picker Title="Select a background colour"
TitleColor="Black"
TextColor="Black"
ItemsSource="{Binding MyColours}"
ItemDisplayBinding="{Binding Name}"
SelectedItem="{Binding selectedBackGroundColour}" SelectedIndexChanged="BackGroundColourPicker_SelectedIndexChanged"/>
根据微软 (https://docs.microsoft.com/en-us/samples/xamarin/xamarin-forms-samples/userinterface-monkeyapppicker/) 的文章: 我有一个“视图”,它基本上定义了我的页面布局。
一个“ViewModel”,它包含一个 IList“MyColours”和一个变量“SelectedBackGroundColour”。
定义 MyColour 类的“模型”。 MyColour 有一个字符串名称和一个 Xamarin.Forms.Color(来自一个十六进制值,两者都在启动时填充)。
这一切都很好。我可以启动应用程序,然后 Picker 会填充我添加到“MyColours”中的颜色。如果我更改索引,那么我的 SelectedBackGroundColour 也会更新,具有正确的名称和不同的 RGB 值。
但是,我不知道应该在哪里更新 MainPageStackLayout 的实际背景颜色。视图(MainPage.xaml.cs)拾取“BackGroundColourPicker_SelectedIndexChanged”事件,但从视图模型读取的标准做法是什么(实际定义了 SelectedBackGround 颜色?)
我觉得我可以在 MainPageStackLayout xaml 视图中绑定背景颜色,这样我就不必捕获选定的索引更改事件。
谢谢大家。
【问题讨论】: