gpt4 book ai didi

wpf - 内部控件和 View 模型之间的 UserControl 属性 "relay";感觉/工作不正常

转载 作者:行者123 更新时间:2023-12-03 10:29:55 28 4
gpt4 key购买 nike

我正在做一个简单的用户控制。例如:

<UserControl x:Class="FileSelectionControl">
<StackPanel>
<Label>File path:</Label>
<TextBox
Text="{Binding Path=SelectedFile,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType=l:FileSelectionControl},
Mode=TwoWay,
Converter={StaticResource fileInfoToStringConverter},
UpdateSourceTrigger=LostFocus,
ValidatesOnDataErrors=True}" />
</StackPanel>
</UserControl>

SelectedFile 是我的 UserControl 公开的一个属性 (DependencyProperty),它包含一个 FileInfo 来表示选定/指定的文件。它旨在绑定(bind)到 View 模型的属性。

绑定(bind)设置,稍微更一般:

Illustration

这种工作,虽然不正确,而且感觉不对。 SelectedFile 属性就像内部控件和 View 模型之间的中继。将文本框绑定(bind)到 SelectedFile 设置为的同一源会更直接...

例如,我遇到的一个缺点是输入验证。 Viewmodel 实现 IDataErrorInfo。如果我为 SelectedFile 启用验证,UserControl 会突出显示。但我需要对内部文本框进行验证(通知)。

那么解决这个问题的好方法是什么?

添加 2012-03-30 (用户控制 View 模型而不是自定义属性):

我认为用户控件更像是一个自定义控件......如果我实现一个带有 ControlTemplate 和 TemplateBindings 到 CustomControl 的自定义属性的 CustomControl(很像我最初的方法)怎么办? (D) 控制上的 Ps 是要走的路,不是吗?我认为关联的 View 模型不会为 CustomControl 提供可接受的“界面”。

最佳答案

通常如果 UserControl足够复杂,需要它自己的ViewModel ,我所有的属性都在ViewModel ,以及 UserControl没有依赖属性,除了可能是 ViewModel属性(property)。

例如,我可能会这样使用它并拥有 UserControl假设它是 DataContextFileSelectionViewModel 类型:

<DataTemplate DataType="{x:Type FileSelectionViewModel}">
<my:FileSelectionUserControl />
</DataTemplate>

或者我可以这样做并拥有我的 UserControl使用 RelativeSource绑定(bind)到引用 ViewModel自身属性:
<my:FileSelectionUserControl FileSelectionViewModel="{Binding FileSelectionVM}" />

通常我唯一一次为 UserControl 创建依赖属性是属性是否仅与 View 相关,而不与数据相关,例如 IsSomeFeatureVisible属性(property)。

关于wpf - 内部控件和 View 模型之间的 UserControl 属性 "relay";感觉/工作不正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9805386/

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