天道酬勤,学无止境

mvvm

Swift associated types and protocol inheritance

问题 我正在使用 Swift 2.2,并声明了一个关联类型的协议,如下所示: protocol CollectionViewModeling { associatedtype CellType func cellAtIndexPath(indexPath: NSIndexPath) -> CellType } 现在我有一个符合上述协议的视图模型协议: enum MyItemCell { case MyItemCell1, MyItemCell2 } protocol ItemsListViewModeling: CollectionViewModeling { associatedtype CellType = MyCell } 最后,在其他地方,我想声明一个符合 le 协议 ItemsListViewModeling 的 var: var viewModel: ItemsListViewModeling 我收到了这个错误: 协议“ItemsListViewModeling”只能用作通用约束,因为它具有 Self 或关联的类型要求 但是我可以很容易地创建一个实现这个协议的类。 是否可以将 var 声明为关联的类型化协议? 当我在协议 ItemsListViewModeling 中给出关联类型的最终类型时,我不明白为什么我会从编译器中看到这个错误。 谢谢 回答1

2022-07-11 09:48:25    分类:技术分享    swift   mvvm   protocols   associated-types

When using MVVM on Android, should each Activity have one (and only one) ViewModel?

问题 在 MVVM 模式中,ViewModel 包含业务逻辑,并在需要更新时通知 View。 它也被关于用户事件的视图通知。 据我了解,每个模型都应该有一个关联的 ViewModel。 所以,如果我们有以下模型: 用户帐户 我们将有以下 ViewModel: 用户视图模型帐户视图模型 但是,我找到的所有关于使用 MVVM 进行数据绑定的示例都使用单个 ViewModel 进行布局。 最近,谷歌在架构组件中引入了 ViewModel 类。 这让我相信一个 Activity 会有一个 ViewModel 可以连接到所有相关的模型: 用户/帐户 --> ActivityViewModel 如果我们想到 RecyclerView,这会变得更加复杂。 每个适配器项本身都可以是一个 ViewModel,因此具有 RecyclerView 的 Activity 将在列表中具有多个 ViewModel,并为剩余的视图内容加上一个主视图(假设它们需要来自 ViewModel 的信息)。 例如: 在此示例中,我们有一个 Account ViewModel 列表和一个 UserViewModel。 这将如何嵌入到单个 ActivityViewModel 中? 回答1 每个视图(活动、片段或自定义视图)应该有一个 ViewModel,有多个 LiveData,每个逻辑单元一个。 在图像中

2022-05-17 03:02:34    分类:技术分享    android   mvvm

Passing window handle to view model in WPF with MVVM

问题 回答1 Typically, your view model shouldn't know about the implementation details of your view (such as it's HWND). However, as your question indicates, the external library you are using requires you to initialize it, and you can only do that in one place. Assuming that your view model is the most appropriate place for it (it might even belong in the model), you can do something like the following. This implementation provides the window handle to your view model as soon as all the pieces are available. Note that the view model implementation that you provided in your previous question

2022-05-16 14:34:03    分类:技术分享    c#   wpf   mvvm

Visual Studio does not show design data

问题 我目前正在尝试将设计数据集成到我的 UWP 应用程序中。 对于这种方法,我遵循了微软的步骤:https://docs.microsoft.com/en-us/windows/uwp/data-binding/displaying-data-in-the-designer 我的问题:数据不会显示。 只有绑定的名称: 但我希望结果更像这样:(旧版本,运行时屏幕) 那么我是如何实现它的呢? 我决定使用“DesignInstance”,因为已经有一个 ViewModel,以后无论如何都会使用它(目前在运行时工作得很好)。 因此,我的“MockupViewModel”继承自原始 ViewModel 并在默认构造函数中创建虚值: public class MockupModel : WeatherViewModel { public MockupModel() : base() { Random Randomizer = new Random(); CurrentData.PrecipitationIcon = WeatherUnicodeIconLib.Neutral.Snow; CurrentData.PrecipitationValue = 0.234; CurrentData.SunRiseSetIcon = WeatherUnicodeIconLib.Miscellaneous

2022-05-16 05:31:08    分类:技术分享    c#   visual-studio   xaml   mvvm   uwp

WPF DataGrid Custom Row Header

问题 我正在使用 WPF / EntityFramework / MVVM 开发数据库前端 现在,当我允许用户将数据添加到数据网格(绑定到可观察集合)时,我被卡住了。 我想要实现的是在 MS Access 中获得一个行标题:所以我的 WPF DataGrid 基本上应该是这样的: 有没有办法将 RowHeaderStyle 绑定到 RowState? 例如: RowState.Editing:显示编辑图标 RowState.NewRow:显示明星 RowState.Default:显示默认行标题 到目前为止我没有找到解决方案,但我认为 WPF 应该足够强大来完成这项工作。 谢谢! 回答1 简单的。 根据DataGridRow的状态,给DataGrid一个RowHeaderStyle交换不同的ContentTemplates 。 幸运的是, DataGridRow是DataGridRowHeader的视觉祖先,因此使用RelativeSource绑定到达那里并获取相关属性的值相对简单: DataGridRow.IsEditing和DataGridRow.IsNewItem 。 我使用<Label>New</Label>等作为您想要使用的任何内容的任意替代。 <DataGrid ItemsSource="{Binding Rows}" > <DataGrid

2022-05-15 22:00:10    分类:技术分享    c#   wpf   xaml   mvvm   datagrid

Update class property in xamarin Forms

问题 class Test { public int ID{ get; set; } public string Name { get; set; } public bool Status { get; set; } } class Consume : BaseViewModel { void main() { ObservableCollection<Test> coll = new ObservableCollection<Test>(); coll = await db.GetData(); foreach (var item in coll) { item.Status = true; //How we can update Status property of class OnPropertyChanged("Status"); } } } 回答1 在您的Test类中实现INotifyPropertyChanged : class Test : INotifyPropertyChanged { public int ID { get; set; } public string Name { get; set; } private bool _status; public bool Status { get { return _status; } set { _status

2022-05-14 23:57:22    分类:技术分享    c#   mvvm   xamarin.forms

Odd behavior when trying to change a bound RadioButton in WPF

问题 我已将Child窗口中的两个单选按钮绑定到在主窗口中构造的ViewModel中的Enum 。 绑定按预期工作,但我注意到一个我无法解决的非常奇怪的行为。 我在这里提供了所有代码,因此您可以自己轻松地重建问题。 以下是查看这种奇怪行为的步骤: 单击主窗口中的按钮 ChildWindow 打开并且 RadioButton 设置为 User 选择自动,然后再次选择用户关闭 ChildWindow 并重新打开它! 尝试将RadioButton更改为 Automatic。 不会变的! <Window x:Class="RadioButtonBinding.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"> <Button Content="Display Child Window" Click="DisplayChildWindow"/> </Window> public partial class MainWindow { public MainWindow() {

2022-05-14 15:29:11    分类:技术分享    c#   wpf   mvvm   radio-button   ivalueconverter

DataTrigger and Storyboard only getting executed once, related to order of declaration?

问题 这是一个显示我遇到的问题的最小玩具示例。 我正在使用 MVVM 创建一个 WPF 应用程序。 主 ViewModel 包含ItemViewModel的集合。 每个项目都有一个枚举Position属性,其值可以是Left 、 Center或Right 。 我想根据它的Position属性定位集合中的每个项目。 当这个值改变时,它需要动画到新的位置。 以下是虚拟机: 项目视图模型.cs public enum Position { Left, Center, Right } public class ItemViewModel : BindableBase { private string _myData; private Position _position; public string MyData { get { return _myData; } set { SetProperty(ref _myData, value); } } public Position Position { get { return _position; } set { SetProperty(ref _position, value); } } } 视图模型.cs public class ViewModel { public ObservableCollection

2022-05-14 14:10:13    分类:技术分享    c#   wpf   mvvm   data-binding

WPF radio buttons - MVVM - binding seems to die?

问题 我已将以下 Window 的DataContext绑定到后面的代码,以给我一个 MVVM style来演示此行为: <Window x:Class="WpfApplication1.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window1" Height="300" Width="300" DataContext="{Binding RelativeSource={RelativeSource Self}}"> <StackPanel> <RadioButton GroupName="test" Content="Monkey" IsChecked="{Binding IsMonkey}"/> <RadioButton GroupName="test" Content="Turtle" IsChecked="{Binding IsTurtle}" /> </StackPanel> </Window> 下面是后面的代码: public partial class Window1 { public Window1() {

2022-05-14 07:04:08    分类:技术分享    .net   wpf   mvvm   binding   radio-button

Why leaps exception: "The calling thread must be STA, because many UI components require this"?

问题 为什么会在加载方法中跳跃异常? 如果是同时进行,一切都很好。 请告诉我,问题是什么以及如何解决? public class MainViewModel : ViewModelBase { private readonly List<string> _listImageUri; private int _currentIndex; private ImageSource _currentImage; public ObservableCollection<Image> CustomControls { get; set; } = new ObservableCollection<Image>(); public MainViewModel() { _listImageUri = new List<string>(); Load("путь к папке"); } private async void Load(string s) { await Task.Run(() => { foreach (var fileInfo in new DirectoryInfo(s).GetFiles()) { _listImageUri.Add(fileInfo.FullName); Image img = new Image(); // exception img.Height =

2022-05-13 02:55:31    分类:技术分享    wpf   mvvm