我尝试将我的UI绑定到自定义DependencyProperty:
<Window.Resources>
<local:Localization x:Key="Localization" xmlns:x="#unknown" xmlns:local="#unknown"/>
</Window.Resources>
<Grid Name="mainStack" DataContext="{StaticResource Localization}">
<Button Padding="10,3" Margin="5" Content="{Binding BtnAdd}" Command="New"/>
</Grid>
我也有“本地化”课程:
class Localization : DependencyObject, INotifyPropertyChanged
{
public static DependencyProperty BtnAddProperty;
static Localization()
{
BtnAddProperty = DependencyProperty.Register("BtnAdd", typeof(string), typeof(Localization));
}
public string BtnAdd
{
set
{
SetValue(BtnAddProperty, value);
}
get
{
return (string)GetValue(BtnAddProperty);
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = this.PropertyChanged;
if (handler != null)
{
PropertyChangedEventArgs e = new PropertyChangedEventArgs(propertyName);
handler.Invoke(this, e);
}
}
public Localization()
{
BtnAdd = MainWindowRes.BtnAdd;
}
public void SwitchLanguage()
{
BtnAdd = MainWindowRes.BtnAdd;
OnPropertyChanged("BtnAdd");
}
}
我的UI元素第一次获取属性值。但是当我使用我的方法SwitchLanguage()时,属性获取新数据,并且UI仍然具有第一个值。
有人能帮助我吗?
P.S。 对不起,我的英文。
Eugene答案 0 :(得分:2)
我试过你的例子,一切似乎都有效 但是有一些陷阱:
您如何致电SwitchLanguage()
?你必须在正确的实例上调用它! (例如,在守则背后:
var res =(本地化)资源[“本地化”];
res.SwitchLanguage();
答案 1 :(得分:0)
无法真正发现任何会导致绑定不更新的错误,但还有其他一些事情需要修复,DP字段应该是只读的,你不应该为DP调用任何属性更改通知,因为它们有通知的内部机制(在SetValue
内)。
您确定MainWindowRes.BtnAdd
的值在SwitchLanguage
中与构造函数中的值有什么不同吗?