我一直试图让我的头围绕浅层绑定和深层绑定,维基百科并没有很好地解释它.假设我有以下代码,如果语言使用动态范围,输出将是什么
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) 我正在尝试学习WPF,但我发现很难理解绑定,"资源"事物和对象创建.我的背景是C++/MFC和C#-Winforms.
我的问题:
我在XAML中看到的大多数示例(在MSDN和我读过的其他两本WPF书籍中)都在绑定表达式中使用StaticResource.这些是否与静态成员有关?或者这只是一个误导性的名字?当作为StaticResource对任何对象进行引用时,它何时被实例化?
据我所知,StaticResources与app/window/control等"Resources"部分中定义的"things"一起使用.
现在,这些参考资料部分对我来说非常混乱.究竟是什么?根据我在MFC中的经验,这些是图标,字符串等.但是,从我看到的所有示例来看,在WPF中,这些似乎基本上是(a)标记中的各种全局对象定义的"倾销场"
(样式,数据模板等)
(b)标记中的各种全局对象实例化我是否正确?这让我非常凌乱.
它主要涉及在XAML中学习各种半DSL(用于定义样式,定义数据模板,创建对象等),并将它们粘贴在同一个地方.我一直在想像手工编辑MFC中的资源文件(.rc).至少那些部分是完全分开的,每个资源的语法都相对简单.
要理解前面两个问题:当我在参考资料部分定义一个对象实例,然后从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的文章,但它们根本没有帮助.
我想从Python中使用一些Haskell库(例如Darcs,Pandoc),但似乎在Python中没有直接的Haskell外部函数接口.有没有办法做到这一点?
我有这个可滚动的框架(实际上是画布内的框架).
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)
但是当我使用鼠标滚轮时,滚动条不会移动.谁能帮我这个?我想要的只是当用户使用鼠标滚轮(在框架区域内/滚动条上)时,画布应自动向上或向下滚动.
我正在遇到以下问题,试图解决WCF中的设置陷阱...
我使用NetTcp绑定创建了WCF客户端 - 服务器服务.我没有对安全设置进行任何更改,当在一台机器上运行时,它运行得非常好.但是,当我从另一台机器运行我的客户端时,它抱怨服务器不喜欢发送的安全凭证.
我现在明白NetTCP默认是"安全的",我的客户端会将错误的安全细节 - 即Windows用户名和密码(或某种形式的域身份验证)传递给我的服务器,因为它们没有运行在它不会喜欢的相同域名.
但是,我不明白的是:
我没有在绑定中指定任何安全性 - 标准设置是否需要发送Windows用户名或密码?
我没有在我的服务器上安装任何证书 - 我知道NetTCP绑定需要某种形式的公共私钥来保护凭证 - 但这似乎在客户端和服务器都在同一台机器上时有效 - 数据是如何获得的加密?或者想要它,因为WCF知道它在同一台机器上并且不需要加密?
我不得不将我的客户端和服务器上的安全模式设置为"none",并且它们连接得很好.但有没有办法在没有证书的情况下加密我的数据?
最后......传输和邮件安全有什么区别?
为了检查我的理解(请原谅!),如果我从A人发送了一封信给人B,并且我对我的手写进行编码,以确保如果有人截获它,他们就无法阅读它了.运输安全是指我决定通过武装运输发送我的信件,以便沿途没有人可以使用它?
是否可以在没有证书的情况下在WCF中进行任何形式的加密?我的项目是一个私人项目,我不想购买证书,数据也不是那么敏感,所以这只是为了我自己的知识.
如何确保按钮的工具提示仅在禁用按钮时可见?
我可以将工具提示的可见性绑定到什么?
所以这是我拥有的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) 我正在探索python.我很好奇python绑定.有人可以解释一下,你怎么可以从Python访问C库.
我想在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) 当我通过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) binding ×10
wpf ×5
c# ×3
python ×3
avalonedit ×1
c ×1
command ×1
credentials ×1
ffi ×1
haskell ×1
mousewheel ×1
mvvm ×1
scoping ×1
scrollbar ×1
security ×1
tkinter ×1
tooltip ×1
visibility ×1
wcf ×1
xaml ×1