复杂的绑定

时间:2012-10-04 19:43:14

标签: c# wpf data-binding

我正在尝试做一个简单的项目,我有一个类,其中一个属性是一个结构。该结构包含一个值。所以我想将Label Content绑定到此值。我怎么能这样做?

谢谢!

3 个答案:

答案 0 :(得分:1)

要添加上面的AkSki答案......

如果您使用双向绑定(读取和写入)或单向源(只写)绑定到结构,它将无法正常工作。

结构总是按值传递,它们不是按引用传递的。这意味着当WPF在幕后传递它们时,它们将被复制为新值而不是通过它们的引用传递。这意味着WPF将写入副本,而不是原始结构。

执行双向或单向源绑定的唯一方法是绑定到类。

如果您只需要将此结构值显示为只读,请按照上面的AlSki的回答。

答案 1 :(得分:0)

您需要声明DependencyProperty以将您的值公开给WPF系统。见Dependecy Properties overview。可能值得声明类上的依赖属性,只需从结构中提取值。

如果现有数据对象仅用于后端数据(或模型),您可能还需要考虑使用前面的另一个类来公开WPF,这个新类通常称为ViewModel。请查看Josh Smith MVVM on MSDN以获得更好的解释。

答案 2 :(得分:0)

它只是有效。这是一个例子:

观点:

<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>

ViewModel:

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中快速构建了这个,但我很确定它适用于旧技术