在处理CurrentLayoutIdChangedEvent事件时,后端会发回正确的数据,但不会调用模型的setter,因此UI不会反映更改。
遵循通常的模式在吸气剂中设置值。
属性:
private LayoutModel _layout;
private string _layoutName;
public LayoutModel Layout
{
get { return _layout; }
set { _layout = value; NotifyOfPropertyChange(() => LayoutName); }
}
public string LayoutName
{
get { return _layout == null ? "Not set" : _layout.Name; }
set { _layoutName = value; NotifyOfPropertyChange(() => FullArea); }
}
事件:
public void Handle(CurrentLayoutIdChangedEvent message) => PopulateLayout(message.LayoutId);
功能:
private void PopulateLayout(int layoutId)
{
if (layoutId > 0)
{
try
{
_layout = _dataProvider.GetLayoutById(layoutId);
}
catch (Exception ex)
{
_logger.Error(ex, "Invalid Layout returned with '{layoutId}', exiting.", layoutId);
}
}
else
{
_logger.Error("Invalid LayoutId, aborting.");
}
}
部分视图:
<StackPanel Grid.Row="1" Grid.Column="0" Orientation="Horizontal">
<TextBlock Text="{x:Static lang:Resources.Txt_LayoutName}" />
<TextBlock x:Name="LayoutName" Margin="10 0 0 0" />
</StackPanel>
接收事件时,将调用函数并将数据加载到_layout中,但不会调用public属性的设置器,因此LayoutName不会更改。
不确定我缺少什么,LayoutName(“未设置”)中的初始数据是否正确显示。 试图在dataProvider返回数据之后引入一个新事件,该事件仅调用NotifyOfPropertyChange(()=> Layout); -也不会给出任何错误或期望的结果。
答案 0 :(得分:1)
相信我已正确理解您的担忧,Layout
期间未调用属性LayoutName
的设置程序,在该过程中您正在通知PopulateLayout
的属性更改,因为您正在将值分配给私有变量_layout
。 (不是属性Layout
)
您需要替换以下行
_layout = _dataProvider.GetLayoutById(layoutId);
使用
Layout= _dataProvider.GetLayoutById(layoutId);
或通过LayoutName
方法通知PopulateLayout
_layout = _dataProvider.GetLayoutById(layoutId);
NotifyOfPropertyChange(() => LayoutName);