标签: binding

动态范围 - 深度绑定与浅层绑定

我一直试图让我的头围绕浅层绑定和深层绑定,维基百科并没有很好地解释它.假设我有以下代码,如果语言使用动态范围,输出将是什么

a)深度约束

b)浅层绑定?

x: integer := 1
y: integer := 2

procedure add
  x := x + y

procedure second(P:procedure)
  x:integer := 2
  P()

procedure first
  y:integer := 3
  second(add)

----main starts here---
first()
write_integer(x)
Run Code Online (Sandbox Code Playgroud)

language-agnostic binding scoping dynamic-scope

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

初学者 - 对WPF中的绑定和资源感到困惑

我正在尝试学习WPF,但我发现很难理解绑定,"资源"事物和对象创建.我的背景是C++/MFC和C#-Winforms.

我的问题:

  1. 我在XAML中看到的大多数示例(在MSDN和我读过的其他两本WPF书籍中)都在绑定表达式中使用StaticResource.这些是否与静态成员有关?或者这只是一个误导性的名字?当作为StaticResource对任何对象进行引用时,它何时被实例化?

  2. 据我所知,StaticResources与app/window/control等"Resources"部分中定义的"things"一起使用.
    现在,这些参考资料部分对我来说非常混乱.究竟是什么?根据我在MFC中的经验,这些是图标,字符串等.但是,从我看到的所有示例来看,在WPF中,这些似乎基本上是(a)标记中的各种全局对象定义的"倾销场" (样式,数据模板等) (b)标记中的各种全局对象实例化我是否正确?这让我非常凌乱.
    它主要涉及在XAML中学习各种半DSL(用于定义样式,定义数据模板,创建对象等),并将它们粘贴在同一个地方.我一直在想像手工编辑MFC中的资源文件(.rc).至少那些部分是完全分开的,每个资源的语法都相对简单.

  3. 要理解前面两个问题:当我在参考资料部分定义一个对象实例,然后从StaticResource绑定中引用它时,它究竟何时被实例化?MSDN说(在"如何:使数据可用于XAML中绑定"中):

您可以使对象可用于绑定的一种方法是将其定义为资源

但是,这不是很清楚.他们的意思是什么?他们的意思是创造?它们是否意味着连接到绑定子系统?什么时候创建该对象?从一个简单的例子开始,我看到WPF似乎在尝试附加绑定时为我创建了这个对象.这更令人困惑.

编辑:在下面的karmicpuppet澄清后,我仍然对如何连接到Binding感到困惑.假设我有我的资源:

<local:Person x:Key="MyPerson" Name="Title"/> 
Run Code Online (Sandbox Code Playgroud)

(其中Person是一个名为Name的属性的类)然后在窗口中我有:

<TextBlock Text="{Binding Source={StaticResource MyPerson}, Path=Name}"/> 
Run Code Online (Sandbox Code Playgroud)

1)这是做什么的?它是否经历了相同的步骤 - 搜索资源然后将其应用于Text属性?MyPerson对象是在创建Window时创建的,还是稍后创建的?2)我是否必须使用绑定机制绑定到Name属性?我不能像你上面用myBrush那样直接绑定它吗?为什么我不能这样做?

<TextBlock Text="{StaticResource MyPerson, Path=Name}"/> 
Run Code Online (Sandbox Code Playgroud)

这只是框架方面的短视吗?我想我在这里失踪很多,但我似乎无法明白...

3)我尝试使用DynamicResource,但我对我采取的每一步都非常困惑.a)在我的单个Window类的代码中添加了一个带有DependencyProperty的DependencyObject(这个DependencyObject是否必要?)

public class SomeText : DependencyObject
{
    public string Header
    {
        get { return (string)GetValue(HeaderProperty); }
        set { SetValue(HeaderProperty, value); }
    }
    public static readonly DependencyProperty HeaderProperty =
        DependencyProperty.Register("Header", typeof(string), typeof(SomeText), new UIPropertyMetadata(0));
}
Run Code Online (Sandbox Code Playgroud)

b)在Windows.Resources中添加了一个实例(这对于DynamicResource是必要的吗?MSDN似乎说没有,但是如果是这样的话,我无法弄清楚如何在XAML中进行下一步)

c)我试过两个:

Text="{Binding Source={DynamicResource HeaderText}, Path=Header}"
Run Code Online (Sandbox Code Playgroud)

这给了我一个例外,并且

Text="{DynamicResource HeaderText}"
Run Code Online (Sandbox Code Playgroud)

但我无法理解将路径放到Header属性的位置.

这是我最近第五次尝试使用WPF,每次我都被这些看似简单的事情所困扰.我已经阅读了2本书,我真的试图理解MSDN的文章,但它们根本没有帮助.

wpf binding

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

从Python调用Haskell函数

我想从Python中使用一些Haskell库(例如Darcs,Pandoc),但似乎在Python中没有直接的Haskell外部函数接口.有没有办法做到这一点?

python binding haskell ffi

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

Python tkinter绑定鼠标滚轮到滚动条

我有这个可滚动的框架(实际上是画布内的框架).

import Tkinter as tk
class Scrollbarframe():
    def __init__(self, parent,xsize,ysize,xcod,ycod):
        def ScrollAll(event):
                canvas1.configure(scrollregion=canvas1.bbox("all"),width=xsize,height=ysize,bg='white')
        self.parent=parent
        self.frame1=tk.Frame(parent,bg='white')
        self.frame1.place(x=xcod,y=ycod)
        canvas1=tk.Canvas(self.frame1)
        self.frame2=tk.Frame(canvas1,bg='white',relief='groove',bd=1,width=1230,height=430)
        scrollbar1=tk.Scrollbar(self.frame1,orient="vertical",command=canvas1.yview)
        canvas1.configure(yscrollcommand=scrollbar1.set)
        scrollbar1.pack(side="right",fill="y")
        canvas1.pack(side="left")
        canvas1.create_window((0,0),window=self.frame2,anchor='nw')
        self.frame2.bind("<Configure>",ScrollAll)
Run Code Online (Sandbox Code Playgroud)

我想将鼠标滚轮绑定到滚动条,以便用户可以向下滚动框架,而无需使用滚动条上的箭头按钮.环顾四周后,我添加了一个canvas1像我这样的绑定

self.frame1.bind("<MouseWheel>", self.OnMouseWheel)
Run Code Online (Sandbox Code Playgroud)

这是功能:

def OnMouseWheel(self,event):
    self.scrollbar1.yview("scroll",event.delta,"units")
    return "break" 
Run Code Online (Sandbox Code Playgroud)

但是当我使用鼠标滚轮时,滚动条不会移动.谁能帮我这个?我想要的只是当用户使用鼠标滚轮(在框架区域内/滚动条上)时,画布应自动向上或向下滚动.

python binding tkinter scrollbar mousewheel

28
推荐指数
4
解决办法
3万
查看次数

WCF NetTcpBinding安全性 - 它是如何工作的?

我正在遇到以下问题,试图解决WCF中的设置陷阱...

我使用NetTcp绑定创建了WCF客户端 - 服务器服务.我没有对安全设置进行任何更改,当在一台机器上运行时,它运行得非常好.但是,当我从另一台机器运行我的客户端时,它抱怨服务器不喜欢发送的安全凭证.

现在明白NetTCP默认是"安全的",我的客户端会将错误的安全细节 - 即Windows用户名和密码(或某种形式的域身份验证)传递给我的服务器,因为它们没有运行在它不会喜欢的相同域名.

但是,我不明白的是:

我没有在绑定中指定任何安全性 - 标准设置是否需要发送Windows用户名或密码?

我没有在我的服务器上安装任何证书 - 我知道NetTCP绑定需要某种形式的公共私钥来保护凭证 - 但这似乎在客户端和服务器都在同一台机器上时有效 - 数据是如何获得的加密?或者想要它,因为WCF知道它在同一台机器上并且不需要加密?

我不得不将我的客户端和服务器上的安全模式设置为"none",并且它们连接得很好.但有没有办法在没有证书的情况下加密我的数据?

最后......传输和邮件安全有什么区别?

为了检查我的理解(请原谅!),如果我从A人发送了一封信给人B,并且我对我的手写进行编码,以确保如果有人截获它,他们就无法阅读它了.运输安全是指我决定通过武装运输发送我的信件,以便沿途没有人可以使用它?

是否可以在没有证书的情况下在WCF中进行任何形式的加密?我的项目是一个私人项目,我不想购买证书,数据也不是那么敏感,所以这只是为了我自己的知识.

security wcf binding credentials nettcpbinding

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

WPF工具提示可见性

如何确保按钮的工具提示仅在禁用按钮时可见?

我可以将工具提示的可见性绑定到什么?

wpf binding visibility tooltip

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

WPF:当某个值更改时重新应用DataTemplateSelector

所以这是我拥有的XAML:

<ItemsControl ItemsSource="{Binding Path=Groups}" ItemTemplateSelector="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=ListTemplateSelector}"/>
Run Code Online (Sandbox Code Playgroud)

这是我的ListTemplateSelector类:

public class ListTemplateSelector : DataTemplateSelector {
public DataTemplate GroupTemplate { get; set; }
public DataTemplate ItemTemplate { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container) {
    GroupList<Person> list = item as GroupList<Person>;
    if (list != null && !list.IsLeaf)
        return GroupTemplate;
    return ItemTemplate;
}
}
Run Code Online (Sandbox Code Playgroud)

GroupTemplate数据模板本身引用了ListTemplateSelector,所以这就是我设置的原因.这是我可以放在一起的唯一递归黑客.但这不是我遇到的问题.

我的问题是,我想在IsLeaf属性更改时从ItemTemplate更改为GroupTemplate.这是第一次读取房产以来的第一次.但是一旦此属性更改,模板选择器就不会重新应用.现在,我可以使用触发器绑定到值并适当地设置项目模板,但我需要能够为每个项目设置不同的模板,因为它们可能处于不同的状态.

例如,假设我有一个像这样的组列表:

第1组:IsLeaf = false,因此template = GroupTemplate

第2组:IsLeaf = true,因此template = ItemTemplate

第3组:IsLeaf = false,因此template = GroupTemplate

一旦组1的IsLeaf属性更改为true,模板就需要自动更改为ItemTemplate.

编辑:

这是我的临时解决方案.有更好的方法吗?

<ItemsControl ItemsSource="{Binding Path=Groups}">
<ItemsControl.ItemTemplate> …
Run Code Online (Sandbox Code Playgroud)

c# wpf binding datatemplateselector

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

python绑定,它是如何工作的?

我正在探索python.我很好奇python绑定.有人可以解释一下,你怎么可以从Python访问C库.

c python binding

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

使用MVVM双向绑定到AvalonEdit文档文本

我想在TextEditor我的MVVM应用程序中包含一个AvalonEdit 控件.我要求的第一件事是能够绑定到TextEditor.Text属性,以便我可以显示文本.为此,我遵循了Make AvalonEdit MVVM兼容的示例.现在,我已使用接受的答案作为模板实现了以下类

public sealed class MvvmTextEditor : TextEditor, INotifyPropertyChanged
{
    public static readonly DependencyProperty TextProperty =
         DependencyProperty.Register("Text", typeof(string), typeof(MvvmTextEditor),
         new PropertyMetadata((obj, args) =>
             {
                 MvvmTextEditor target = (MvvmTextEditor)obj;
                 target.Text = (string)args.NewValue;
             })
        );

    public new string Text
    {
        get { return base.Text; }
        set { base.Text = value; }
    }

    protected override void OnTextChanged(EventArgs e)
    {
        RaisePropertyChanged("Text");
        base.OnTextChanged(e);
    }

    public event PropertyChangedEventHandler PropertyChanged;
    public void RaisePropertyChanged(string info)
    {
        if (PropertyChanged != null) …
Run Code Online (Sandbox Code Playgroud)

c# wpf binding mvvm avalonedit

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

命令绑定无法将类型为"System.Reflection.RuntimeEventInfo"的对象强制转换为类型"System.Reflection.MethodInfo"

当我通过XAML将我的按钮连接到命令时,我得到一个运行时错误System.Windows.Markup.XamlParseException:提供'System.Windows.Data.Binding'上的值引发异常.---> System.InvalidCastException:无法将类型为"System.Reflection.RuntimeEventInfo"的对象强制转换为"System.Reflection.MethodInfo".

当我在XAML中删除命令绑定时,一切正常,我的项目显示等.这是命令绑定:

Click="{Binding ElementName=MainGrid, Path=DataContext.AlertClickCommand}"
Run Code Online (Sandbox Code Playgroud)

用于连接视图模型的代码(在我窗口后面的代码中):

this.AlertsView.DataContext = GlobalStuff.AlertManager1.AlertViewModel1;
Run Code Online (Sandbox Code Playgroud)

这是我的视图模型我的视图模型是我视图的数据上下文

using System.Collections.Generic;
using System.ComponentModel;
using Arkle.SharedUI.Model;
using Arkle.SharedUI.ViewModel.Commands;

namespace Arkle.SharedUI.ViewModel
{
    public class AlertViewModel : INotifyPropertyChanged
    {

        private List<Alert> _alerts = new List<Alert>();
        public List<Alert> Alerts
        {
            get { return _alerts; }
            set
            {
                _alerts = value;
                OnPropertyChanged("Alerts");
            }
        }


        public AlertViewModel()
        {
            if (DesignerProperties.IsInDesignMode)
            {
                LoadDesignTimeData();
            }
        }

        private void LoadDesignTimeData()
        {
            Alerts.Add(new Alert { BackgroundMessage = "Sis", IsAlerting = true, OverlayMessage = "3 mins", Tip = …
Run Code Online (Sandbox Code Playgroud)

c# wpf xaml binding command

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