标签: datacontext

WPF:为什么没有在逻辑子上引发DataContextChanged?

我有一个问题,DataContextChanged没有在我的自定义Panel控件的逻辑子上引发.我把它缩小到这个:

从向导生成的WPF应用程序开始,我添加:

    private void Window_Loaded( object sender, RoutedEventArgs e )
    {
        var elt = new FrameworkElement();
        this.AddLogicalChild( elt );
        DataContext = 42;
        Debug.Assert( (int)elt.DataContext == 42 );
    }
Run Code Online (Sandbox Code Playgroud)

据我所知,这是有效的,因为DataContext是一个可继承的依赖属性.

现在,我在Window(this)及其逻辑子代上为DataContextChanged添加事件处理程序:

    this.DataContextChanged += 
        delegate { Debug.WriteLine( "this:DataContextChanged" ); };
    elt.DataContextChanged += 
        delegate { Debug.WriteLine( "elt:DataContextChanged" ); };
Run Code Online (Sandbox Code Playgroud)

如果我运行它,只会执行第一个事件处理程序.为什么是这样?如果不是AddLogicalChild(elt),我会执行以下操作:

this.Content = elt;
Run Code Online (Sandbox Code Playgroud)

两个处理程序都将执行.但是在我的情况下这不是一个选项 - 我正在向我的控件中添加FrameworkContentElements,它们不应该是可视化的孩子.

这里发生了什么?除了AddLogicalChild()之外,我还应该做些什么来使它工作吗?

(幸运的是,有一个相当简单的解决方法 - 只需将元素的DataContext绑定到窗口的DataContext)

BindingOperations.SetBinding( elt, FrameworkElement.DataContextProperty, 
            new Binding( "DataContext" ) { Source = this …
Run Code Online (Sandbox Code Playgroud)

wpf datacontext logical-tree

2
推荐指数
1
解决办法
4202
查看次数

LINQ Datacontext处理问题

Cannot access object: DataContext after it's been disposed在下面的DAL方法中得到了一个.我以为我可以在那里打电话处理. result是一个IEnumurable,我认为这是IQueryable造成这些问题的原因.

我究竟做错了什么?如何应该我来处置我的DataContext.还有什么比返回更好的DataTable吗?这是一个指向SQL 2005的桌面应用程序.

导致此错误的示例方法 - >


    public static DataTable GetEnrolledMembers(Guid workerID)
    {
        var DB = CmoDataContext.Create();

        var AllEnrollees = from enrollment in DB.tblCMOEnrollments
                           where enrollment.CMOSocialWorkerID == workerID || enrollment.CMONurseID == workerID
                           join supportWorker in DB.tblSupportWorkers on enrollment.EconomicSupportWorkerID
                               equals supportWorker.SupportWorkerID into workerGroup
                           from worker in workerGroup.DefaultIfEmpty()
                           select
                               new
                               {
                                   enrollment.ClientID,
                                   enrollment.CMONurseID,
                                   enrollment.CMOSocialWorkerID,
                                   enrollment.EnrollmentDate,
                                   enrollment.DisenrollmentDate,
                                   ESFirstName = worker.FirstName,
                                   ESLastName = worker.LastName, …
Run Code Online (Sandbox Code Playgroud)

.net c# datacontext linq-to-sql

2
推荐指数
1
解决办法
1353
查看次数

无法将Statement Lambda放在LINQ查询中

我正在尝试将一些内联工作作为语句Lambda注入到LINQ查询中select,如此...

// NOTE: mcontext.Gettype() == System.Data.Linq.DataContext

// Okay - compiles, nothing unusual
var qPeople1 = from ME.tblPeople person in mcontext.tblPeoples
              select person;

// ERROR - see below compile Error - Can I retrofit this thing?
var qPeople2 = from ME.tblPeople person in mcontext.tblPeoples
               select (() => { 
                   return person; 
               })();
Run Code Online (Sandbox Code Playgroud)

错误:

错误2方法名称预期file.cs 166 27 MigrationCore

...但是我也同样很高兴看到Expression Lambda首先内联工作.

注意:我知道代码示例是多余的,但我正在寻找基本概念.如果它可行,我将扩展它.

.net c# linq datacontext lambda

2
推荐指数
1
解决办法
2095
查看次数

误解数据绑定基础和DataContexts - 长篇大论

我一直在几个简单的情况下使用数据绑定,取得了相当不错的成功.通常我只使用INotifyPropertyChanged来启用我的代码隐藏来修改屏幕上的GUI值,而不是为所有内容实现依赖项属性.

我正在使用LED控件来了解有关用户控件中数据绑定的更多信息,并被迫使用依赖属性,因为VS2008告诉我必须这样做.我的应用程序很简单 - 我有一个窗口,显示几个LED控件,每个控件上面都有一个数字,可选择一个控件.LED应该可以使用默认颜色进行定义,以及更改状态.

我开始写一个LED控制器,看起来非常好.首先,我开始使用这样的代码:

LED.xaml

<UserControl x:Class="LEDControl.LED"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="Auto" Width="Auto">

    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>
        <!-- LED portion -->
        <Ellipse Grid.Column="0" Margin="3" Height="{Binding LEDSize}" Width="{Binding LEDSize}" Fill="{Binding LEDColor}" StrokeThickness="2" Stroke="DarkGray" />
        <Ellipse Grid.Column="0" Margin="3" Height="{Binding LEDSize}" Width="{Binding LEDSize}">
            <Ellipse.Fill>
                <RadialGradientBrush GradientOrigin="0.5,1.0">
                    <RadialGradientBrush.RelativeTransform>
                        <TransformGroup>
                            <ScaleTransform CenterX="0.5" CenterY="0.5" ScaleX="1.5" ScaleY="1.5"/>
                            <TranslateTransform X="0.02" Y="0.3"/>
                        </TransformGroup>
                    </RadialGradientBrush.RelativeTransform>
                    <GradientStop Offset="1" Color="#00000000"/>
                    <GradientStop Offset="0.4" Color="#FFFFFFFF"/>
                </RadialGradientBrush>
            </Ellipse.Fill>
        </Ellipse>
        <!-- label -->
        <TextBlock Grid.Column="1" Margin="3" VerticalAlignment="Center" Text="{Binding LEDLabel}" />
    </Grid>
</UserControl>
Run Code Online (Sandbox Code Playgroud)

这样可以很好地吸收LED.然后,我将LEDSize,LEDLabel和LEDColor绑定到Ellipse属性,方法是this.DataContext …

c# data-binding wpf datacontext .net-3.5

2
推荐指数
1
解决办法
732
查看次数

对ListView和DataContext的一些困扰

我编写了以下C#和XAML代码:

namespace ListViewExample1
{
public partial class MainWindow : Window
{
    public ObservableCollection<MyColleague> myCollegues = new ObservableCollection<MyColleague>();

    public MainWindow()
    {
        myCollegues.Add(new MyColleague() { Name = "Tim", Surname = "Meier" });
        myCollegues.Add(new MyColleague() { Name = "Martin", Surname = "Hansen" });
        myCollegues.Add(new MyColleague() { Name = "Oliver", Surname = "Drumm" });


        InitializeComponent();
    }

    public ObservableCollection<MyColleague> MyColleagues 
    {
        get { return this.myCollegues; }
    }
}

public class MyColleague
{
    public String Name { get; set; }

    public String Surname { get; set; …
Run Code Online (Sandbox Code Playgroud)

c# data-binding wpf datacontext xaml

2
推荐指数
1
解决办法
1万
查看次数

如何将POCO对象绑定到WPF GUI?

我在一个简单的WPF应用程序中有三张图片。汽车,飞机和火车。

当我单击它们中的任意一个时,我将加载一个具有运输名称,图片文件路径和其他字符串属性的适当的“运输”对象。一个简单的POCO对象。

如何在XAML中声明各种模板,以便随后可以将该POCO对象用作数据源,并将属性X放在元素Foo中?

这是我简单的XAML:

<StackPanel>
    <TextBlock>Car</TextBlock>
    <TextBlock>Slow</TextBlock>
    <TextBlock>4 Wheels</TextBlock>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

因此,此处的属性将是我提供的POCO的模板持有人。

如何提供此数据上下文?

wpf datacontext user-interface

2
推荐指数
1
解决办法
1246
查看次数

帧导航 - DataContext未继承

我有一个XAML文件代表WPF应用程序的主窗口.现在我希望此窗口显示由另一个XAML文件指定的内容.这有效,但在DataContext我的C#代码中丢失了UserControl.

我认为<Frame Source=....>以某种方式破坏了WPF的逻辑树.我希望有相同的行为,就好像<Frame Source=....>只是被Content1.xaml文件内容替换,即DataContext周围Window类的继承到UserControl.

有没有一种简单的方法可以解决这个问题?我发现的所有解决方案看起来都有点矫枉过正.

伪代码

MainWindow.xaml

<Window ....>
    <Frame Source="Content1.xaml" />
</Window>
Run Code Online (Sandbox Code Playgroud)

Content1.xaml

<UserControl ....>
  <!-- Content goes here -->
</UserControl>
Run Code Online (Sandbox Code Playgroud)

navigation wpf datacontext frame

2
推荐指数
1
解决办法
2302
查看次数

当父类型可以不同时,如何在wpf中访问父类的DataContext?

我需要在wpf xaml中访问parent的DataContext.整个xaml页面代码是动态的.所以不知道父母的类型.

我写这个

<Grid DataContext={Binding Path=.}>
Run Code Online (Sandbox Code Playgroud)

它是否正确?

wpf datacontext xaml binding

2
推荐指数
1
解决办法
5636
查看次数

Hot Towel Angular-Breeze课程 - 获取breezeProvider错误

我正在遵循John Papa的课程中的每一步,使用Angular和Breeze构建应用程序 - 第1部分.一旦我完成了题为"在第一个片段开始播放通过您的应用创建垂直片段"的模块,我开始得到breezeProvider错误.

请在下面找到错误图片,以及datacontext.js代码.

非常感谢您的建议.

                  -------------------------------------------
Run Code Online (Sandbox Code Playgroud)

在F12 Dev Tools中,控制台错误是:

未捕获错误:找不到breeze localhost:1772/Scripts/breeze.angular.js:90 [shell] Hot Towel Angular loading!空值

错误:[$ injector:unpr]未知提供者:breezeProvider < - breeze < - entityManagerFactory < - datacontext

[app] [CC Error] [$ injector:unpr]未知提供者:breezeProvider < - breeze < - entityManagerFactory < - datacontext

微风错误

这是我的datacontext.js代码:

(function () {
 'use strict';

var serviceId = 'datacontext';
angular.module('app').factory(serviceId, ['common', 'entityManagerFactory', datacontext]);

function datacontext(common, emFactory) {   // emFactory param refers to 'entityManagerFactory'
    var EntityQuery = breeze.EntityQuery;
    var getLogFn = common.logger.getLogFn;  
    var log = getLogFn(serviceId); …
Run Code Online (Sandbox Code Playgroud)

datacontext angularjs breeze hottowel

2
推荐指数
1
解决办法
2501
查看次数

MVVM绑定未在视图中显示

我在后面的代码中设置我的数据上下文,并在XAML中设置绑定.调试显示我的数据上下文正在从我的模型填充,但这并没有反映在我的视图中.

可能是简单的事情,但这让我困扰了好几个小时.

 public partial class MainWindow : Window
{
    public MainWindow(MainWindowVM MainVM)
    {

        this.DataContext = MainVM;
        InitializeComponent(); 


    }
}

    public class MainWindowVM : INotifyPropertyChanged
{
    private ICommand m_ButtonCommand;
    public User UserModel = new User();
    public DataAccess _DA = new DataAccess();

    public MainWindowVM(string email)
    {
        UserModel = _DA.GetUser(UserModel, email);
        //ButtonCommand = new RelayCommand(new Action<object>(ShowMessage));
    }
  }


public class User : INotifyPropertyChanged
{
    private int _ID;
    private string _FirstName;
    private string _SurName;
    private string _Email;
    private string _ContactNo;

    private List<int> _allocatedLines;

    public …
Run Code Online (Sandbox Code Playgroud)

c# wpf datacontext xaml mvvm

2
推荐指数
1
解决办法
810
查看次数