如果从其他视图模型调用函数,则不会触发依赖属性
本文关键字:属性 依赖 其他 视图 模型 函数 调用 如果 | 更新日期: 2023-09-27 17:56:55
In my usercontrol.xaml.cs.我有这种依赖性,就像吹嘘一样。
public static readonly DependencyProperty MessageKeyProperty =
DependencyProperty.Register("MessageKey", typeof(String),
typeof(UC_MessageEntry),
new FrameworkPropertyMetadata(null,
new PropertyChangedCallback(MessageKeyPropertyChangedCallback)));
private static void MessageKeyPropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (d is UC_MessageEntry)
{
UC_MessageEntryucMessageEntryAccessDenied = (UC_MessageEntry)d;
if (e.NewValue != null)
{
ResourceBundle resourceBundle = App.ResourceBundle;
if (e.NewValue.ToString().Equals("enable"))
{
ucMessageEntryAccessDenied.txtAceessDeniedMsg.Text = "";
return;
}
String actualMessage = resourceBundle.GetString("Resources", e.NewValue.ToString());
if (actualMessage == null)
{
ucMessageEntryAccessDenied.txtAceessDeniedMsg.Text = resourceBundle.GetString("Resources", "ContractSetup.ExchangeAccessDeniedMessage.OTHERS");
}
else
{
ucMessageEntryAccessDenied.txtAceessDeniedMsg.Text = actualMessage;
}
}
else
{
ucMessageEntryAccessDenied.txtAceessDeniedMsg = null;
}
}
}
public String MessageKey
{
get
{
return (String)this.GetValue(MessageKeyProperty);
}
set
{
this.SetValue(MessageKeyProperty,value);
}
}
在 mainwindow.xaml 中,我绑定了这个消息密钥,如下所示。
<view_MessageEntry:UC_MessageEntry
x:Uid="local:UC_MessageEntry_1" x:Name="UC_OrderEntry" MessageKey="{Binding MsgAccessDenied}"
Style="{DynamicResource contentControlStyle}" SnapsToDevicePixels="True" Margin="0" />
在MessageViewModle.cs背后,
private static readonly PropertyChangedEventArgs MsgAccessDeniedPropertyChangedEventArgs
= new PropertyChangedEventArgs("MsgAccessDenied");
private string _msgAccessDenied;
public string MsgAccessDenied
{
get
{
if (_selectedExchange != null)
{
return _msgAccessDenied;
}
else
{
return "enable";
}
}
set
{
_msgAccessDenied = value;
this.RaisePropertyChanged(this, MsgAccessDeniedPropertyChangedEventArgs);
}
}
public void FireMsg()
{
this.MsgAccessDenied="value";
}
当组合框选择发生变化时,我调用了FireMsg(),它将更新usercontrol.xaml.cs中的MessageKeyPropertyChangedCallback函数。它工作正常。但是如果我从其他视图模型调用它 FireMsg(),_msgAccessDenied 的值就会更新。但是 MessageKeyPropertyChangedCallback 函数没有触发。这个问题有什么解决方案吗?谢谢。
你的代码看起来总体上是合理的。 但是,如果未调用依赖项属性更改回调,则几乎可以肯定是因为依赖项属性的值未更改。 如果依赖项属性绑定到源,则可能是因为源没有更改。
从我对代码的快速回顾中,我可以看到这种情况发生的唯一方法是:
- 设置
MsgAccessDenied
的值- 这会导致设置字段
_msgAccessDenied
- 调用
RaisePropertyChanged
方法以触发PropertyChanged
- 依赖子系统执行其强制获取
MsgAccessDenied
MsgAccessDenied
吸吮剂称为- getter 检查
_selectedExchange
,它是空
的 - getter 返回值
"enable"
而不是新值_msgAccessDenied
- 以前的值也被
"enable"
- 依赖子系统说,好的,没有变化
- 不调用属性更改回调
总之,_selectedExchange
可以隐藏_msgAccessDenied
中的值变化,从而防止上游更改回调触发。
这只是一个理论。