将可观察的集合从ViewModel绑定到View

时间:2020-06-22 23:38:30

标签: c# wpf mvvm data-binding datagrid

我已经尝试过挖掘一些类似的帖子,并认为我丢失了一些东西,因为我无法显示数据。 目前,组合框为空,我希望自己正在做一些愚蠢的事情而缺少一些简单的事情。

模型

public class Rule
{
    [Key]
    public int RuleId { get; set; }
    public string Rule { get; set; }
}

查看

<DataGridComboBoxColumn Header="Rule"  DisplayMemberPath="Rule" Width="200">
    <DataGridComboBoxColumn.ElementStyle>
        <Style TargetType="{x:Type ComboBox}">
            <Setter Property="ItemsSource" Value="{Binding Path=_ViewModel.Rules , RelativeSource={RelativeSource AncestorType={x:Type Window}}}" />
        </Style>
    </DataGridComboBoxColumn.ElementStyle>
    <DataGridComboBoxColumn.EditingElementStyle>
        <Style TargetType="{x:Type ComboBox}">
            <Setter Property="ItemsSource" Value="{Binding Path=_ViewModel.Rules, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" />
        </Style>
    </DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>

查看续页

public partial class RulePage : Page
{
    private readonly RuleViewModel _ViewModel;
}

ViewModel

public class RuleViewModel
{
    public ObservableCollection<Rule> Rules { get; set; }
}

我相信,这是所有相关代码。基本上,我试图从Page的_ViewModel实例中获取一个规则列表,以将其加载到组合框中,但全部空白。谢谢!

1 个答案:

答案 0 :(得分:1)

很幸运地自己解决了。原来是这些页面,所以我不得不将import spacy spacyModel = spacy.load('en') list1 = ["Hi, first example 1"] list2 = ["Now, second example","hello, a new example 1 in the third row","And now something completely different"] list1SpacyDocs = [spacyModel(x) for x in list1] list2SpacyDocs = [spacyModel(x) for x in list2] similarityMatrix = [[x.similarity(y) for x in list1SpacyDocs] for y in list2SpacyDocs] print(similarityMatrix) 设置为{RelativeSource AncestorType={x:Type Window}

每次导航时,我还必须将{RelativeSource AncestorType={x:Type Page}设置为Page。