Silverlight - 在XAML中而不是在构造函数中设置DataContext?

Mat*_*lay 30 silverlight datacontext

如何在XAML中的Grid上设置DataContext,而不是在构造函数中?

以下是我在构造函数中的操作方法(LayoutRoot是XAML中定义的XAML Grid):

this.LayoutRoot.DataContext = this.HPVM;
Run Code Online (Sandbox Code Playgroud)

我宁愿在XAML中正确地做,但我不知道如何在XAML中引用HPVM对象.HPVM是USerControl类的公共属性.

它工作正常,如上所列,但同样,我只想知道如何在XAML中的UserControl类的属性,而不是总是必须在代码中执行它.

以下是所有相关代码:

  <UserControl x:Class="SilverlightApplication1.SLHolePattern" x:Name="HolePatternsControl"
    xmlns="http://schemas.microsoft.com/client/2007"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:sys="clr-namespace:System;assembly=mscorlib"    
    xmlns:controls="clr-namespace:Microsoft.Windows.Controls;assembly=Microsoft.Windows.Controls"
    xmlns:local="clr-namespace:SilverlightApplication1"    
    xmlns:GeoPatterns="clr-namespace:GeoPatterns"
    Height="700">


    <UserControl.Resources>
    ...
Run Code Online (Sandbox Code Playgroud)

这是我的构造函数,其中当前设置了DataContext:

namespace SilverlightApplication1
{
    public partial class SLHolePattern : UserControl, INotifyPropertyChanged
    {
        public HolePatternsViewModel HPVM;

        public SLHolePattern()
        {
            InitializeComponent();

            this.HPVM=new HolePatternsViewModel();
            this.LayoutRoot.DataContext = this.HPVM;
            ...more code here
        }
Run Code Online (Sandbox Code Playgroud)

一切正常,但我只想学习如何在XAML中设置DataContext,而不是在代码中.

Kli*_*ger 23

克里斯给出的答案很好.我已经测试过,它对我有用.您可以在XAML中实例化您的类(在UserControl.Resources中),然后将datacontext绑定到静态资源.

关注代码:


<UserControl ...>
    <UserControl.Resources>
       <myNS:MyClass x:Name="TheContext" x:Key="TheContext"></myNS:MyClass>
    </UserControl.Resources>
    <Grid x:Name="LayoutRoot" Background="White" DataContext="{StaticResource TheContext}" >
        <TextBlock Text="{Binding Path=Field1}">
        </TextBlock>
    </Grid>
</UserControl>

  • 是的你可以.您可以执行以下操作:var aCustomer = this.Resources ["Cust"]作为客户; aCustomer.Name ="abc"; (3认同)
  • 我忘了添加ax:Name属性.x:键在XAML和x中起作用:名称使对象对代码可见. (2认同)

Chu*_*Tey 10

以下怪物适用于Silverlight 4

<UserControl 
  DataContext="{Binding HPVM, RelativeSource={RelativeSource Self}}">
Run Code Online (Sandbox Code Playgroud)

  • 我只是在我的嘴里吐了一点. (2认同)

小智 6

<UserControl.DataContext>
  <vm:ThisUCViewModel />
</UserControl.DataContext>
Run Code Online (Sandbox Code Playgroud)