我正在尝试做一个简单的项目,其中我有一个类,它的一个属性是一个结构。此结构包含一个值。所以我想将一个标签内容绑定到这个值。我怎样才能做到这一点?
谢谢!
要添加到上面 AkSki 的答案...
如果您使用双向绑定(读取和写入)或单向源(只写)绑定到结构,它不会像您预期的那样工作。
结构总是按值传递,它们不是按引用传递。这意味着当 WPF 在后台传递它们时,它们将被复制为新值,而不是通过它们的引用传递。这意味着 WPF 将写入副本,而不是原始结构。
执行双向或单向源绑定的唯一方法是绑定到类。
如果您只需要将此结构值显示为只读,请按照上面 AlSki 的回答。
您需要声明一个 DependencyProperty 以将您的值公开给 WPF 系统。请参阅依赖属性概述。可能值得在类上声明依赖属性并从结构中提取值。
如果您现有的 datat 对象只是用于您的后端数据(或模型),您可能还需要考虑在此之前使用另一个类来暴露给 WPF,这个新类通常称为 ViewModel。查看MSDN 上的 Josh Smith MVVM以获得很好的解释。
它只是工作。这是一个例子:
风景 :
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Label Content="{Binding FinalDestination.X}"/>
<Label Grid.Row="1" Content="{Binding FinalDestination.Y}"/>
</Grid>
</Window>
视图模型:
using System.Windows;
namespace WpfApplication1
{
public class ViewModel
{
public Point FinalDestination { get; private set; }
public ViewModel()
{
FinalDestination = new Point(8, 8);
}
}
}
视图的代码隐藏:
namespace WpfApplication1
{
public partial class MainWindow
{
public MainWindow()
{
InitializeComponent();
DataContext = new ViewModel();
}
}
}
注意:我已经在 .NET 4.5 上的 Visual Studio 2012 中快速构建了这个,但我很确定它适用于旧技术