【发布时间】:2015-12-21 00:40:30
【问题描述】:
我在模型中有一个属性,我想在加载视图时设置一次。它是一个影响视图的属性,因此感觉应该在视图中设置它(而不是模型中的默认值)。我不希望最终用户设置该属性,这就是它未绑定到 UI 元素的原因。我希望视图设计器设置值。
视图模型(可以访问模型)设置为视图中用户控件的数据上下文。这似乎应该很简单,但我一直无法弄清楚。
谢谢
【问题讨论】:
标签: wpf xaml properties
我在模型中有一个属性,我想在加载视图时设置一次。它是一个影响视图的属性,因此感觉应该在视图中设置它(而不是模型中的默认值)。我不希望最终用户设置该属性,这就是它未绑定到 UI 元素的原因。我希望视图设计器设置值。
视图模型(可以访问模型)设置为视图中用户控件的数据上下文。这似乎应该很简单,但我一直无法弄清楚。
谢谢
【问题讨论】:
标签: wpf xaml properties
当FrameworkElement 加载事件发生时,你的意思是要调用xaml 中定义的ChangePropertyAction 吗?
<UserControl>
<i:Interaction.Triggers>
<i:EventTrigger EventName="Loaded">
<ei:ChangePropertyAction TargetObject="{Binding Model}"
PropertyName="IsLoaded"
Value="True" />
</i:EventTrigger>
</i:Interaction.Triggers>
</UserControl>
编辑:在 UserControl 上有一个名为 IsLoaded 的属性,不幸的是它不是 DependencyProperty,您不能轻松地将数据绑定到 id。
但是还有一个简单的方法:
<UserControl Loaded="SetIsLoaded">
void SetIsLoaded(object sender, EventArgs e){
((ViewModel)DataContext).Model.IsLoaded = true;
}
【讨论】:
我在模型中有一个属性。
你的意思是模型还是视图模型?拥有这样的属性从视图传播到模型感觉就像一种难闻的气味,尽管也许我错了。也许你的一个例子会有所帮助。
如果您需要在设计器中设置该属性,您总是可以在后面的代码中定义一个依赖属性。假设您将此 UI 部分封装在用户控件中。然后使用依赖属性的 OnChange 方法将该值传播到您需要的地方。您可能还需要考虑在设置 DataContext 之前设置依赖属性时的情况。为此,您必须确保在 DataContext 的 OnChange 方法中获取依赖项属性的值,并且如果设置了它,则将其传播到您需要的地方。
【讨论】:
我在模型中有一个属性,我想在加载视图时设置一次。
使用后面的 Window/Control Loaded 事件代码来更改包含提到的模型的 VM 上的值。你是不是想多了?
【讨论】: