【问题标题】:Caliburn Micro reload data on eventCaliburn Micro 重新加载事件数据
【发布时间】: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


【解决方案1】:

相信我正确理解了您的担忧您正在通知LayoutName 的属性更改的属性设置器PopulateLayout 期间不会调用PopulateLayout,因为您正在为私有变量_layout 赋值. (不是属性Layout

您需要替换以下行

 _layout = _dataProvider.GetLayoutById(layoutId);

 Layout= _dataProvider.GetLayoutById(layoutId);

或者通过PopulateLayout方法通知LayoutName

_layout = _dataProvider.GetLayoutById(layoutId);
NotifyOfPropertyChange(() => LayoutName);

【讨论】:

  • 谢谢 Anu,第一个对我来说是更好的解决方案,因为 Layout 还有其他需要了解模型更改的属性。
猜你喜欢
  • 1970-01-01
  • 2013-05-19
  • 1970-01-01
  • 2016-01-04
  • 1970-01-01
  • 2015-07-07
  • 1970-01-01
  • 2013-03-22
  • 1970-01-01
相关资源
最近更新 更多