【问题标题】:WPF Binding to code behind methodsWPF 绑定到方法背后的代码
【发布时间】:2011-02-02 01:05:08
【问题描述】:

这很烦人 - 我知道我会在网络上怎么做...

我有一个 wpf 图像,我想将它的源属性绑定到一个方法,并从它的绑定项中传递一个属性。

IE。

<image source="GetMySource({binding name})" />

GetMySource 在哪里

protected string GetMySource(string name)
{
return "images/"+name+".png";
}

【问题讨论】:

  • 没关系,我现在用另一种方法解决了。我确定这是我在某个时候需要做的事情,而且我真的不想使用转换器,所以如果有人有一个很好的答案。
  • 您能否将 Aurelien 标记为正确或发布您的答案以帮助其他寻找类似答案的人:)
  • 但是他们都没有给我我需要的答案,我把它打开,以防有人知道正确的答案。
  • 我编辑了我的解决方案,为您提供一个可能的简单解决方案。

标签: wpf binding code-behind


【解决方案1】:

这就是 .NET 不使用方法返回简单对象,而是使用 CLR 属性的原因。您使用的是 Java 风格,而不是 .NET 风格。

public string MySource {
  get { return "images/" + name + ".png"; }
}

现在属性暴露了,你有一些选择:

  1. DataBind 您的视图到自身(在构造函数中:DataContext = this;

  2. 为您的 UserControl(或其他名称)命名 (&lt;UserControl x:name="this" ...&gt;)

  3. 使用相对源绑定

编辑:

如果我理解得很好,实际上您想使用参数(此处为图像名称)进行绑定。你不能。只有 Command 绑定允许使用 CommandParameter。您可以使用许多声明为 ObjectDataProviders 或 Converters 的资源,但这对于您的简单工作来说开销太大。

您的简单解决方案:为所有图像使用一个数组,并单向绑定到该数组的各个对象。

private string[] mysource = new[] {
  "images/foo.png", 
  "images/bar.png", 
  "images/baz.png"};
public string[] MySource {
  get { return mySource; }
}
  1. DataBind 将您的视图绑定到自身(在构造函数中:DataContext = this;

    1. ...等

我没有测试它,但是下面文章中的那个人做了: http://www.codeproject.com/Articles/37352/WPF-Binding-to-individual-collection-items-but-not.aspx

【讨论】:

  • 好的,我们已经接近了,所以也许我应该澄清我的要求 :) 如果我使用上一篇文章中所示的 CPR 属性,我的图像位于使用 itemssouce 绑定的列表视图中。因此“名称”来自应用于列表视图的绑定。图片在列表视图中,我现在需要说“Source="{Binding MySource(Name)}” - 或者你给我的任何适当的命令:)
  • 如果图像的来源依赖于项目,那么属性可能会进入代表每个项目的类。
  • 项目名称在里面,我需要根源灵活。这是世界上最简单的 ASP.NET,为什么 WPF 必须这么难。
猜你喜欢
  • 2011-01-06
  • 2018-11-24
  • 1970-01-01
  • 2011-01-22
  • 2011-08-15
  • 2018-07-17
  • 1970-01-01
  • 2011-08-16
  • 2015-05-16
相关资源
最近更新 更多