2015-09-23 71 views
0

我在模型中有一个属性,我想在加载视图时设置一个属性。它是一个影响视图的属性,所以它应该在视图中设置(而不是模型中的默认值)。我不希望最终用户设置属性,这就是为什么它不绑定到UI元素。我希望视图设计者设置价值。从XAML设置模型/视图模型的属性,不属于UI项目

viewmodel(可以到达模型)被设置为视图中usercontrol的datacontext。这似乎应该是直截了当的,但我一直无法弄清楚。

感谢

回答

2

你的意思是有些想调用ChangePropertyAction在xaml中定义,当FrameworkElement加载事件发生时?

<UserControl> 
    <i:Interaction.Triggers> 
     <i:EventTrigger EventName="Loaded"> 
      <ei:ChangePropertyAction TargetObject="{Binding Model}" 
            PropertyName="IsLoaded" 
            Value="True" /> 
     </i:EventTrigger> 
    </i:Interaction.Triggers> 

</UserControl> 

编辑:有物业称为IsLoaded的用户控件,可惜的是它不是的DependencyProperty,你不能轻易对数据绑定ID。

不过还是有一个简单的方法:

<UserControl Loaded="SetIsLoaded"> 
void SetIsLoaded(object sender, EventArgs e){ 
    ((ViewModel)DataContext).Model.IsLoaded = true; 
} 
+0

有趣。我会试试这个。这可能是我正在寻找的,但比我想象的要复杂得多。我不是在敲我的想法,我认为这将是非常简单的:-) –

+0

这做了我想要的。谢谢! –

+0

我更喜欢你原来的那个。也许我不应该?但我喜欢它,因为我目前没有任何代码,所以我从来不想去那里看。您发布的第一个方法可以让我看到,所以我可以根据需要进行更改。 –

1

我有我想要的视图加载时一次性设置模型的属性。

使用后面的Window/Control Loaded事件代码来更改包含提到的模型的VM上的值。你只是在想这个吗?

+0

我是不是该得太多?大概。它只是觉得我可以在视图本身中设置一个值(而不是背后的代码)。我试图做什么不是一个好主意?这不可能吗?谢谢 –

+1

@MaxPower MVVM只是一个逻辑层的分离;人们会挂在什么地方,这发生在我们所有人身上。只要有一个分离的问题存在,有时候可以适应一次性的情况。坦率地说,我发现只要将视图上的项目更改为视图模型,不会被大多数开发人员视为虚假的。所以我说从视图来看。 :-) – OmegaMan

+0

谢谢你。我是一名嵌入式工程师,但在编写必须与我的嵌入式系统交互的PC应用程序时,我希望始终保持应该做的事情。我可以把它放在代码背后。 –

0

我在模型中有一个属性。

是指模型或视图模型?拥有这样一个属性从视图传播到模型感觉像一种难闻的气味,虽然也许我错了。也许你的一个例子会有所帮助。

如果您需要在设计器中设置该属性,则始终可以在后面的代码中定义依赖项属性。假设您将此UI部分封装在用户控件中。然后使用依赖项属性的OnChange方法在需要的位置传播该值。您可能还需要考虑在设置DataContext之前设置依赖项属性的情况。为此,您将必须确保在DataContext的OnChange方法上获得依赖项属性的值,并且如果它设置了它,则将它传播到您需要的位置。

+0

在这种情况下,我想要设置的值在模型中。我使用了word属性,因为我使用Simple MVVM Toolkit,并且该值使用NotifyPropertyChanged通知UI。如果我将它绑定到一个UI元素,让我们说一个文本框,模型中的属性将由用户通过绑定进行更新。我想要做同样的事情,但不是最终用户更新,我希望UI设计人员在UI之前将其设置为 –