如何解决Silverlight样式和绑定
| 我在Silverlight样式中遇到绑定问题。 这是我的viewmodel:public class MyObject
{
public Uri TheUrl { get; set; }
public string MyText { get; set; }
}
public class viewmodel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public MyObject Object1 { get { return new MyObject { TheUrl = new Uri(\"test.png\",UriKind.Relative),MyText = \"Test1\" }; } }
public MyObject Object2 { get { return new MyObject { TheUrl = new Uri(\"test.png\",MyText = \"Test2\" }; } }
}
这是我的xaml:
<UserControl.Resources>
<Style x:Key=\"TestStyle\" targettype=\"Button\">
<Setter Property=\"Template\">
<Setter.Value>
<ControlTemplate targettype=\"Button\">
<StackPanel>
<TextBlock Text=\"{Binding MyObject.MyText}\" />
<Image Source=\"{Binding MyObject.TheUrl}\" />
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
<UserControl.DataContext>
<vm:viewmodel />
</UserControl.DataContext>
<StackPanel x:Name=\"LayoutRoot\" Background=\"White\">
<Button Style=\"{StaticResource TestStyle}\" Width=\"100\" Height=\"100\" Tag=\"{Binding Object1}\" />
<Button Style=\"{StaticResource TestStyle}\" Width=\"100\" Height=\"100\" Tag=\"{Binding Object2}\" />
</StackPanel>
我以自己的风格测试了很多东西,但是无法使绑定生效。
有人有主意吗?
预先感谢您的任何帮助
最好的祝福。
编辑:
对viewmodel的更改:
public class MyObject : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (null != handler)
{
handler(this,new PropertyChangedEventArgs(propertyName));
}
}
private Uri _TheUrl;
public Uri TheUrl
{
get { return _TheUrl; }
set
{
_TheUrl = value;
NotifyPropertyChanged(\"TheUrl\");
}
}
private string _MyText;
public string MyText
{
get { return _MyText; }
set
{
_MyText = value;
NotifyPropertyChanged(\"MyText\");
}
}
}
public class viewmodel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (null != handler)
{
handler(this,new PropertyChangedEventArgs(propertyName));
}
}
private MyObject _Object1;
public MyObject Object1
{
get { return _Object1; }
set
{
_Object1 = value;
NotifyPropertyChanged(\"Object1\");
}
}
private MyObject _Object2;
public MyObject Object2
{
get { return _Object2; }
set
{
_Object2 = value;
NotifyPropertyChanged(\"Object2\");
}
}
public viewmodel()
{
Object1 = new MyObject {TheUrl = new Uri(\"test.png\",MyText = \"Test1\"};
Object2 = new MyObject { TheUrl = new Uri(\"test.png\",MyText = \"Test2\" };
}
}
解决方法
似乎在按钮上使用DataContext而不是Tag是有效的
,您的课程未正确实现
INotifyPropertyChanged
接口。
添加此方法:
private void NotifyPropertyChanged(String propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (null != handler)
{
handler(this,new PropertyChangedEventArgs(propertyName));
}
}
向您的财产设定者添加呼叫to5ѭ
private Uri _TheUrl;
public Uri TheUrl {
get { return _TheUrl;}
set {
_TheUrl = value;
NotifyPropertyChanged(\"TheUrl\");
}
}
您应该对Object1
和Object2
进行相同设置(基本上是要绑定到的所有对象)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。