从XAML设置ViewModel的属性

我有一些UserControl ,它的DataContext绑定到ViewModel,如何从XAML设置ViewModel的属性? 可能吗?

UPD:很抱歉不太清楚,我试图得到这样的东西:UserControl的DataContext绑定到ViewModel,我需要将ViewModel的属性设置为某些东西(比方说,UserControl的Width属性)。 可能吗?

UPD2:似乎不可能。我知道关于TwoWay绑定模式等等,我想做的事情 – 将ViewModel的属性设置为UserControl的一个

这个例子应该非常清楚

  

绑定有两种方式:即从源(例如视图模型)到目标(例如用户控件)和从目标返回到源。
您可以通过绑定模式指定方向。

以下是BindingModes :

  • 双向
  • 单程
  • 一度
  • OneWayToSource

在您的情况下,如果要将usercontrol的width属性绑定到ViewModel的TheWidth属性:

案例A:
想要双向绑定,请使用Mode = TwoWay

    

案例B:
想要仅从usercontrol绑定到viewmodel,请使用Mode = OneWayToSource

    

我不确定我是否完全理解这个问题。

但这是一个例子。 它会:

  • 通过在xaml中设置用户控件DataContext属性,在用户控件内创建类型为ExampleViewModel的视图模型

  • 在xaml中创建一个文本框并将其绑定到视图模型TextInViewModel字符串属性。

  • 设置通常的INotifyPropertyChanged接口(这被提取到基类ViewModelBase

在xaml中创建视图模型并将用户控件数据上下文设置为:

          

视图模型:

 public abstract class ViewModelBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public void RaisePropertyChanged(string prop) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(prop)); } } } public class ExampleViewModel : ViewModelBase { ///  /// Property bound to textbox in xaml. ///  public String TextInViewModel { get { return _textInViewModel; } set { _textInViewModel= value; RaisePropertyChanged("TextInViewModel"); } } private string _textInViewModel; ///  /// Constructor. ///  public ExampleViewModel() { } } 

XAML

     

我更喜欢ViewModel Locator方法(这就像viewModel的服务定位器pattorn)。 因为你的ViewModel很快就会有构造函数参数,你要么是标题耦合,要么不能使用上面描述的xaml方式….

有许多ViewModel-Locator方法,这里使用MEF和silverlight来描述。 http://johnpapa.net/simple-viewmodel-locator-for-mvvm-the-patients-have-left-the-asylum

这是另一个人: http ://brendan.enrick.com/post/Wire-up-your-ViewModels-using-a-Service-Locator.aspx

好吧,你将UI元素绑定到它们:

      

假设这样的视图模型:

 class ViewModel { public string MyProperty { get; set; } public int DisplayWidth { get; set; } } 

通过绑定我亲爱的朋友..

例如:(假设在您的上下文中)

如果您有“Person”类,并且您的人员具有Name和SurName公共属性,并且您希望将其绑定到文本框。 您执行以下操作:

  

这仅在名称是您的公共属性时才有效,最佳做法是将对象(在本例中为Person)作为公共属性并以不同方式使用Path参数。

例:

  

它会减少您的代码混乱,然后在viewmodel中为viewmodel中的任何对象的每个属性创建一个属性。

“如何从XAML设置ViewModel的属性?是否可能?”

所以,这似乎是不可能的,你可以完成最大限度 – 双向绑定,不幸的是,这不是我想要的。 总而言之,设计相当糟糕而不是问题