绑定到运行时加载的XAML

时间:2011-08-15 08:10:55

标签: wpf xaml data-binding runtime

我有想法,很快就解释说我想加载xaml-files运行时,然后将它们绑定到运行时数据。 在这些xaml文件中,我将使用名为“PropertySetter”的组件,如下所示:

public class PropertySetter : UserControl
{
    public string Value { get; set; }
    public string Text { get; set; }
    public string Adress { get; set; }

    public PropertySetter()
    {
    }
}

xamlfile看起来像这样:

<Grid
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"   
    xmlns:vf="clr-namespace:VisualFactory.vfGraphics.Graphics;assembly=VisualFactory">
    <vf:PropertySetter Name="Datapoint" Text="propset" Value="false" Adress="10201"  />
    <CheckBox IsChecked="{Binding ElementName=Datapoint, Path=Value}" Content="{Binding ElementName=Datapoint, Path=Text}" />
</Grid>

我希望你现在明白这一点。 该复选框将其值(内容,缺陷)绑定到属性设置器,当应用程序运行时,它只更改一堆“PropertySetter”的值,图形更新其内容和值。 但是:当xaml在加载时正确设置值时,当我更改属性设置器的值时,它不会更新它们。我尝试过设置Mode = TwoWay,并且属性设置在iNotify集合中。 有人曾尝试过这样的事吗?

2 个答案:

答案 0 :(得分:0)

您需要执行的操作是在INotifyPropertyChanged课程中实施PropertySetter,并在每个属性的设置者中触发PropertyChanged事件。这是绑定知道在源更改时更新UI的机制。

class PropertySetter :UserControl,INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private string address;
    private string text;
    private string value;

    public string Value
    {
        get { return value; }
        set
        {
            if (value == value)
                return;
            value = value;
            PropertyChanged(this, new PropertyChangedEventArgs("Value"));
        }
    }

    public string Text
    {
        get { return text; }
        set
        {
            if (text == value)
                return;
            text = value;
            PropertyChanged(this, new PropertyChangedEventArgs("Text"));
        }
    }

    public string Address
    {
        get { return address; }
        set
        {
            if (address == value)
                return;
            address = value;
            PropertyChanged(this, new PropertyChangedEventArgs("Address"));
        }
    }

    public PropertySetter()
    {

    }
}

PS:用于TwoWay数据绑定,用于告知数据绑定在目标中进行更改时(在您的情况下,{ {1}}的属性),这些属于来源(在您的情况下,CheckBox的属性)。

希望这会有所帮助:)

答案 1 :(得分:0)