gpt4 book ai didi

c# - silverlight 绑定(bind)到自定义控件中的依赖项属性

转载 作者:行者123 更新时间:2023-11-30 18:08:15 25 4
gpt4 key购买 nike

我已经创建了一个在我的 View 中实例化的自定义控件,在我的自定义控件(一个文本框)中我设置了一个绑定(bind)到文本值的依赖属性,这一切都正常工作并更新。但是,我现在想将我的 View 的依赖属性绑定(bind)到我的控件的依赖属性,但我无法让它正常工作。这就是我的意思

控制选择位

    <TextBox x:Name="txtBox" 
GotFocus="txtBox_GotFocus"
LostFocus="txtBox_LostFocus"
Grid.Row="0"
Text="{Binding TextValueProperty, Mode=TwoWay}"/>

public DependencyProperty TextValueProperty{ get; set; }

public int TextValue
{
get { return (int)GetValue(TextValueProperty); }
set
{
if ((value >= MinValue) && (value <= MaxValue))
{
SetValue(TextValueProperty, value);
}
}
}
public CustomControl()
{
TextValueProperty = DependencyProperty.Register("TextValueProperty ", typeof(int), typeof(CustomControl), new PropertyMetadata(null ));
}

查看选定位

<my:CustomControl x:Name="TxtBoxInt"  Grid.RowSpan="2" Grid.Row="0"  Grid.Column="1"/>

我想这样做:

<my:CustomControlx:Name="TxtBoxInt" TextValueProperty="{Binding DestinationProperty}" Grid.RowSpan="2" Grid.Row="0"  Grid.Column="1"/>

和 View 中的代码

 public DependencyProperty DestionationProperty;


public int Destination
{
get
{
return (int)GetValue(DestionationProperty);
}
set
{
SetValue(DestionationProperty, value);
}
}

public CustomControl()
{
DestionationProperty = DependencyProperty.Register("DestionationProperty", typeof(int), typeof(CustomControl), null);
InitializeComponent();
}

那么我需要做什么才能在我的 View 中绑定(bind)我的 int 值 Destination,使其与自定义控件中的 TextValue 具有相同的值?谢谢:)

ps喜灰

最佳答案

是的,哦,我现在实际上已经解决了这个问题,为了其他人的利益,我将尝试记下我如何在没有代码在我面前的情况下做到最好。

好吧,首先是我的自定义控件,一开始我没有正确使用依赖属性(哈哈)。所以让我们先纠正一下。

 public partial class CustomControl : UserControl
{
public DependencyProperty FieldValueProperty { get; set; }

public CustomControlViewModel Context = new CustomControlViewModel();

public int FieldValue
{
get { return (int) GetValue(FieldValueProperty); }
set
{
SetValue(FieldValueProperty,value);
}
}

public CustomControl()
{
this.DataContext = Context;
FieldValueProperty = DependencyProperty.Register("FieldValue", typeof (int), typeof (CustomControl),
new PropertyMetadata(FieldValueChanged));
InitializeComponent();

}

void FieldValueChanged(Object sender, DependencyPropertyChangedEventArgs e)
{
Context.FieldValue = (int)e.NewValue;
}
}

public class CustomControlViewModel : BaseClass
{
private int _fieldValue;

public int FieldValue
{
get { return _fieldValue; }
set
{
_fieldValue = value;
RaisePropertyChanged("FieldValue");
}
}
}

那里有相当多的变化,最好的思考方式是查看 CustomControl 的公共(public) FieldValue,它使用 GetValue 和 SetValue 就像您的依赖属性的方法一样简单,当您使用 SetValue 时,它​​使用依赖属性,当值更改时,依赖属性调用 FieldValueChanged 方法,您指定它在 DependencyProperty.Register 元数据中调用。这种处理正在更改的 FieldValue 的方法然后在 CustomControlViewModel 中设置 FieldValue,为此 public int 设置我们访问以返回 fieldvalue 的私有(private)值,但正如您注意到的那样,还调用了 RaisePropertyChanged("FieldValue") 方法。现在这个方法是从实现这个方法的我的 BaseClass 继承的,它基本上实现了 INotifyPropertyChanged 的​​东西。所以现在当我的值发生变化时,基本上会推送一个事件,现在我需要做的就是在我的 View 中处理包含此控件的事件。这一点是构造函数中的一个简单位

CustomControlInstance.Context.PropertyChanged += FieldValueChanged(Object Sender, PropertyChangedEventArgs e);

然后一个简单的方法

void FieldValueChanged(Object Sender, PropertyChangedEventsArgs e)
{
this.FieldValue = (int)e.NewValue;
}

然后使用控件中的 FieldValue 更新我的 View 的 FieldValue,其中有一些漏洞,但它是我记得/向您解释的最好的,希望这对人们有所帮助,我当然更了解依赖属性现在:)

当我明天回到电脑上时,我会接受这个答案作为已接受的答案

关于c# - silverlight 绑定(bind)到自定义控件中的依赖项属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3395994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com