c# - 无法将 ObservableCollection 从 MVVM 绑定(bind)到 WPF 中的 ListView

标签 c# wpf mvvm

我正在尝试将 ListView 绑定(bind)到一个类的 Observable 集合,但出于某种原因,GridViewColumn 的 DisplayMemberBinding 属性未绑定(bind)到集合的内容。 如果我使用 ListView.ItemTemplate,一切正常。但是我需要网格形式的数据,所以我在 ListView.View 中使用 GridView。

First Image,Image 1是debug模式下的AssessmentSummaryList内容。 Second Image,Image 2 是屏幕上显示的最终输出。列表中的内容未绑定(bind)到 GridViewColumn。

这是我正在使用的两个 View 模型:

public class AssessmentSummaryViewModel : BaseViewModel
{
    public string Question { get; set; }

    public string Title { get; set; }

    public string SelectedOption { get; set; }

    public int Id { get; set; }
}

public class AssessmentViewModel : BaseViewModel 
{
    private ObservableCollection<AssessmentSummaryViewModel> assessmentSummaryList;

    public ObservableCollection<AssessmentSummaryViewModel> AssessmentSummaryList
    {
        get { return assessmentSummaryList; }
        set
        {
            assessmentSummaryList = value;
            NotifyPropertyChanged("AssessmentSummaryList");

        }
    } 

    public void SetNextAssessment()
    {
       AssessmentSummaryList= Service.GetAssessmentSummary(ApplicationModel.SelectedModule.Id,    
         ApplicationModel.SelectedUtility.Id); //the service returns ObservableCollection<AssessmentSummaryViewModel> data
      var EndScreen = new AssessmentSummaryView(); //Setting the last screen to AssessmentSumamryView, this will be called dynamically from other UserControl Xaml Page
    }
}

AssessmentSummaryView Xaml代码如下:

<ListView x:Name="lstvSummary1" Grid.Row="2" ItemsSource="{Binding Path=DataContext.AssessmentSummaryList, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}">
<ListView.View>
            <GridView ColumnHeaderContainerStyle="{StaticResource myHeaderStyle}">
                <GridViewColumn DisplayMemberBinding="{Binding Path=Title}" Width="200">
                    <GridViewColumnHeader Content="Design Element" />
                </GridViewColumn>
                <GridViewColumn DisplayMemberBinding="{Binding Path=Question}" Width="400">
                    <GridViewColumnHeader Content="Question" />
                </GridViewColumn>
                <GridViewColumn DisplayMemberBinding="{Binding Path=SelectedOption}" Width="300">
                    <GridViewColumnHeader Content="Response" />
                </GridViewColumn>
            </GridView>
        </ListView.View>
</ListView>

AssessmentSummaryView 代码隐藏如下:

public partial class AssessmentSummaryView : UserControl
{
    public AssessmentSummaryView()
    {
        InitializeComponent();
    }
}

最佳答案

尝试这样的事情:

<ListView ItemsSource="{Binding Path=DataContext.AssessmentSummaryList, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}">
<ListView.View>
    <GridView>
        <GridView.Columns>
            <GridViewColumn Header="Design Element" Width="200" DisplayMemberBinding="{Binding Path=Title}"/>
            <GridViewColumn Header="Question" Width="400" DisplayMemberBinding="{Binding Path=Question}"/>
            <GridViewColumn Header="Response" Width="300" DisplayMemberBinding="{Binding Path=SelectedOption}"/>
        </GridView.Columns>
    </GridView>
</ListView.View>

关于c# - 无法将 ObservableCollection 从 MVVM 绑定(bind)到 WPF 中的 ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22238708/

相关文章:

c# - 元组.Create : The type arguments for method cannot be inferred from the usage

c# - 如果 IsEditable 和 IsReadOnly 为真,如何使 WPF ComboBox 键盘文本搜索正常工作?

c# - 使用 Xamarin.Forms 中的 View 模型属性绑定(bind)到 StaticResource?

javascript - knockout : How to conditionally display and store a value dependent on a dropdown?

c# - 将元素插入源后 WPF DataGrid 不更新

wpf - 在MVVM中更改另一个属性时如何更改属性

c# - 如何在新进程中启动form2?

c# - 如何设置 ActionExecutingContext 状态码

c# - 使用 NUnit——如何获取当前正在执行的测试夹具和名称?

wpf - 在 WPF 中自定义上下文菜单