【发布时间】:2019-08-05 18:20:17
【问题描述】:
在处理 CurrentLayoutIdChangedEvent 事件时,后端会发回正确的数据,但不会调用模型的 setter,因此,UI 不会反映更改。
按照通常的模式在 getter 中设置值。
属性:
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属性的setter,所以LayoutName不会改变。
不确定我缺少什么,LayoutName 中的初始数据(“未设置”)正确显示。 试图在dataProvider返回数据后引入一个新事件,只调用NotifyOfPropertyChange(() => Layout); - 也没有给出任何错误或期望的结果。
【问题讨论】:
-
您的绑定在 XAML 中的什么位置?
标签: c# wpf data-binding caliburn.micro