所以这是设置。我有两种不同的WPF View 。 StandardEngineeredView和StandardEngineeredPrintView。我的StandardEngineeredViewModel中有一个名为ModelRevisionList的ObservableCollection。

我正在做的是尝试从两个不同的 View 绑定(bind)到ModelRevisionList数据源。我将 View 的数据上下文设置为相同的 View 模型。我的StandardEngineeredView中有一个按钮,可将我导航到StandardEngineeredPrintView。第二个 View 实际上仅用于允许某人打印数据。注意,我还有两个其他属性将在两个 View 的 View 模型中绑定(bind)。我只是还没有尝试这样做,因为在尝试绑定(bind)到修订列表时,出现以下错误:



相关信息

  • 我正在使用MVVM Light。
  • 我的第一个 View 最初绑定(bind)到可观察的集合,并且数据正好在 View 中显示。
  • 两个 View 都使用相同的数据上下文。
  • 当我从 View 模型获取可观察的集合时,抛出该错误。

  • StandardEngineeredViewModel修订列表
    private ObservableCollection<Revision> _ModelRevisionList = new ObservableCollection<Revision>();
    public ObservableCollection<Revision> ModelRevisionList
    {
        get { return _ModelRevisionList; } //Error thrown here upon get
        set { Set(ref _ModelRevisionList, value); }
    }
    

    绑定(bind)的 StandarEngineeredView列表框
    <ListBox
       BorderBrush="{StaticResource BackgroundBlueBrush}"
       ItemsSource="{Binding ModelRevisionList}"
       SelectedItem="{Binding SelectedRevision}"
       DisplayMemberPath="Date"
       Margin="70 10"
       MinHeight="150"
       MaxHeight="150"
       ItemStringFormat="{}{0:MM/dd/yyyy}"/>
    

    绑定(bind)的 StandardEngineeredPrintView网格 View
    <Border Grid.Column="1" MaxHeight="250" MaxWidth="400" MinWidth="400">
        <DataGrid ItemsSource="{Binding ModelRevisionList}" AutoGenerateColumns="False">
            <DataGridTextColumn Header="Date" Binding="{Binding Date}"/>
            <DataGridTextColumn Header="Edited By" Binding="{Binding EditedBy}"/>
            <DataGridTextColumn Header="Description" Binding="{Binding Description}"/>
        </DataGrid>
    </Border>
    

    在两个 View 中设置的数据上下文
    DataContext="{Binding StandardEngineeredViewInstance, Source={StaticResource Locator}}"
    

    查看模型定位器
     public class ViewModelLocator
    {
        /// <summary>
        /// Initializes a new instance of the ViewModelLocator class.
        /// </summary>
        public ViewModelLocator()
        {
            ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
            SetupNavigation();
    
            if (ViewModelBase.IsInDesignModeStatic)
            {
                // Create design time view services and models
                SimpleIoc.Default.Register<IDataAccessService, DataAccessService>();
            }
            else
            {
                // Create run time view services and models
    
                SimpleIoc.Default.Register<IDataAccessService, DataAccessService>();
            }
        }
    
        public StandardEngineeredViewModel StandardEngineeredViewInstance
        {
            get
            {
                SimpleIoc.Default.Register<StandardEngineeredViewModel>();
                return ServiceLocator.Current.GetInstance<StandardEngineeredViewModel>();
            }
        }
    
        public static void Cleanup()
        {
            // TODO Clear the ViewModels
        }
        private static void SetupNavigation()
        {
            SimpleIoc.Default.Unregister<IFrameNavigationService>();
            var navigationService = new FrameNavigationService();
            navigationService.Configure("StandardEngineeredPrintView", new Uri("/Views/EngineeringViews/StandardEngineeredPrintView.xaml", UriKind.Relative));
            SimpleIoc.Default.Register<IFrameNavigationService>(() => navigationService);
        }
    }
    

    现在由于该错误,我认为这与以下事实有关:在导航到StandardEngineeredPrintView之前,我在StandardEngineeredView中使用了可观察的集合。您是否可以将两个 View 绑定(bind)到同一数据源?我是在做我不知道的错误事情吗?

    非常感谢您的建议,如果您想了解更多信息/代码,就这么说。

    谢谢!

    最佳答案

    好的,解决方案非常简单。我的数据网格设置不正确。我不得不将其更改为:

    <DataGrid ItemsSource="{Binding ModelRevisionList}" AutoGenerateColumns="False">
         <DataGrid.Columns>
              <DataGridTextColumn Header="Date" Binding="{Binding Date}"/>
              <DataGridTextColumn Header="Edited By" Binding="{Binding EditedBy}"/>
              <DataGridTextColumn Header="Description" Binding="{Binding Description}"/>
         </DataGrid.Columns>
    </DataGrid>
    

    忘记了DataGrid.Columns

    关于c# - 从两个不同的 View 绑定(bind)到数据源。 MVVM,WPF,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52101882/

    10-12 18:49
    查看更多