【问题标题】:Cannot bind view programmatically in Caliburn.Micro无法在 Caliburn.Micro 中以编程方式绑定视图
【发布时间】:2011-10-31 19:50:11
【问题描述】:

我查看了以下线程并按照示例尝试动态绑定视图: Caliburn.Micro: Create and Bind View programmatically

我的主视图有一个带有以下 XAML 的 DataGrid:

<DataGrid Name="DataGridTestSuites" Grid.Row="1" 
      HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="12"
      IsReadOnly="True" AutoGenerateColumns="False"
      ItemsSource="{Binding TestSuites}"
      RowDetailsVisibilityMode="VisibleWhenSelected"
      cal:Message.Attach="[Event RowDetailsVisibilityChanged] = [Action PopulateTestSuiteDetail($this, $eventArgs)]">
<DataGrid.Columns>
    <DataGridTextColumn Header="Name" Binding="{Binding Name}" />
    <DataGridTextColumn Header="Category" Binding="{Binding Category}" />
    <DataGridTextColumn Header="Assembly" Binding="{Binding AssemblyPath}" />
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
    <DataTemplate>
        <StackPanel x:Name="StackPanelTestSuiteDetail" />
    </DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>

注意 DataTemplate 中的 StackPanel。这是我要注入子视图的地方。

我的视图模型有一个名为 PopulateTestSuiteDetails() 的函数,它附加到 XAML 中描述的 RowDetailsVisibilityChanged 事件:

public void PopulateTestSuiteDetail(DataModels.TestSuite testSuite, object eventArgs)
{
    if (!(eventArgs is DataGridRowDetailsEventArgs)) return;

    StackPanel stackPanel = (StackPanel)((DataGridRowDetailsEventArgs)eventArgs).DetailsElement.FindName("StackPanelTestSuiteDetail");

    var methodViewModel = IoC.Get<TestSuiteHelperMethodViewModel>();

    var methodView = new Harness.Views.TestSuiteHelperMethodView();

    stackPanel.Children.Add(methodView);
    ViewModelBinder.Bind(methodViewModel, methodView, null);
}

当我调试我的程序时,该函数确实被正确调用。但是,我的子视图似乎没有正确附加(我的子视图有一个基本按钮,当数据网格行处于焦点时它不可见。)知道为什么吗?

【问题讨论】:

  • 除了使用 StackPanel,我还尝试使用名为 ActiveTestSuiteDetail 的 ContentControl。我的视图模型中有相同的属性。但是,它似乎没有正确附加视图。

标签: c# .net caliburn.micro


【解决方案1】:

事实证明,我必须执行以下操作来设置我的视图和视图模型。

contentControl.Content = methodView;
Caliburn.Micro.View.SetModel(methodView, methodViewModel);

【讨论】:

  • 你必须在哪里做这个?
猜你喜欢
  • 2011-09-14
  • 1970-01-01
  • 1970-01-01
  • 2015-09-11
  • 2015-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-01
相关资源
最近更新 更多