Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight 3.0 Silverlight 3中的依赖属性和数据上下文_Silverlight 3.0_Datacontext_Dependency Properties - Fatal编程技术网

Silverlight 3.0 Silverlight 3中的依赖属性和数据上下文

Silverlight 3.0 Silverlight 3中的依赖属性和数据上下文,silverlight-3.0,datacontext,dependency-properties,Silverlight 3.0,Datacontext,Dependency Properties,我正在使用Silverlight 3 beta版,我遇到了一个问题。我有一个页面,上面有一个用户控件。用户控件上有一个dependency属性。如果用户控件未定义数据上下文(因此使用父控件的数据上下文),则所有控件都可以正常工作。但是,如果用户控件有自己的数据上下文,则不会调用dependency属性的OnPropertyChanged方法 以下是一个示例: 我的主页: <UserControl x:Class="TestDepProp.MainPage" xmlns="h

我正在使用Silverlight 3 beta版,我遇到了一个问题。我有一个页面,上面有一个用户控件。用户控件上有一个dependency属性。如果用户控件未定义数据上下文(因此使用父控件的数据上下文),则所有控件都可以正常工作。但是,如果用户控件有自己的数据上下文,则不会调用dependency属性的OnPropertyChanged方法

以下是一个示例:

我的主页:

    <UserControl x:Class="TestDepProp.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
             xmlns:app="clr-namespace:TestDepProp"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Width="400" Height="100">
    <Grid x:Name="LayoutRoot" Background="White">
        <Border BorderBrush="Blue" BorderThickness="3" CornerRadius="3">
            <StackPanel Orientation="Horizontal">
                <StackPanel Orientation="Vertical">
                    <TextBlock Text="Enter text here:" />
                    <TextBox x:Name="entryBlock" Text="{Binding Data, Mode=TwoWay}"/>
                    <Button Content="Go!" Click="Button_Click" />
                    <TextBlock Text="{Binding Data}" />
                </StackPanel>
                <Border BorderBrush="Blue" BorderThickness="3" CornerRadius="3" Margin="5">
                    <app:TestControl PropOnControl="{Binding Data}" />
                </Border>
            </StackPanel>
        </Border>
    </Grid>
</UserControl>
主页的数据上下文:

    using System.ComponentModel;

namespace TestDepProp
{
    public class MainPageData:INotifyPropertyChanged
    {

        string _data;
        public string Data
        {
            get
            {
                return _data;
            }
            set
            {
                _data = value;
                if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("Data"));
            }
        }

        public MainPageData()
        {
            Data = "Initial Value";
        }

        #region INotifyPropertyChanged Members

        public event PropertyChangedEventHandler PropertyChanged;

        #endregion
    }
}
    using System.ComponentModel;

namespace TestDepProp
{
    public class MyDataContext : INotifyPropertyChanged
    {

        #region INotifyPropertyChanged Members

        public event PropertyChangedEventHandler PropertyChanged;

        #endregion
    }
}
控制XAML:

    <UserControl x:Class="TestDepProp.TestControl"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
             xmlns:app="clr-namespace:TestDepProp"
    >
    <Grid x:Name="LayoutRoot" Background="White">
        <StackPanel Orientation="Vertical" Margin="10" >
            <TextBlock Text="This should change:" />
            <TextBlock x:Name="ControlValue" Text="Not Set" />
        </StackPanel>
    </Grid>
</UserControl>
控件的数据上下文:

    using System.ComponentModel;

namespace TestDepProp
{
    public class MainPageData:INotifyPropertyChanged
    {

        string _data;
        public string Data
        {
            get
            {
                return _data;
            }
            set
            {
                _data = value;
                if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("Data"));
            }
        }

        public MainPageData()
        {
            Data = "Initial Value";
        }

        #region INotifyPropertyChanged Members

        public event PropertyChangedEventHandler PropertyChanged;

        #endregion
    }
}
    using System.ComponentModel;

namespace TestDepProp
{
    public class MyDataContext : INotifyPropertyChanged
    {

        #region INotifyPropertyChanged Members

        public event PropertyChangedEventHandler PropertyChanged;

        #endregion
    }
}
要进行尝试,请在文本框中键入内容,然后单击“开始”按钮。注释掉控件代码中的数据上下文,以查看它是否开始工作


希望有人知道发生了什么事

用户控件的datacontext没有数据属性


因为它没有数据属性,数据绑定返回null,这已经是默认值,所以属性更改永远不会触发。

我不明白这一点。为什么它需要有一个数据属性。并非所有DCs都有数据属性。我的所有VM类都没有数据属性。我甚至没有将任何东西绑定到子类上的DC。如果有绑定数据,它会告诉它查找数据属性。它看不到一个,结果是一个空值,它什么也不做。这与你的问题无关,但我想知道你为什么要使用Silverlight 3 Beta?Silverlight现在是版本5,那么为什么要在旧版本的测试版上工作呢?