使用 Grid DataContext 的 WPF ComboBox 集

WPF ComboBox Set using Grid DataContext

我是 C# WPF 的新手,我想将 DataContext 设置为 combobox 我的 xml 低于

<Grid Name="groupEditArea"  HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="#FFD8D8D8" Margin="-14,0,192,0">
                    <Label Content="Group Name" FontSize="18" HorizontalAlignment="Left" Margin="116,50,0,0" VerticalAlignment="Top" Width="136"/>
                    <Label Content="Group Type" FontSize="18" HorizontalAlignment="Left" Margin="116,123,0,0" VerticalAlignment="Top" Width="136"/>
                    <TextBox x:Name="groupGroupNameTxt" HorizontalAlignment="Left" FontSize="16" Height="31" Margin="368,50,0,0" TextWrapping="Wrap" Text="{Binding Path = GroupName, Mode=TwoWay, StringFormat=\{0:n3\}, UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Top" Width="226"  TextChanged="groupGroupNameTxt_TextChanged"  /> <!-- GotFocus="GroupGroupNameTxt_OnGotFocus" TextInput="GroupGroupNameTxt_OnTextInput"  -->
                    <ComboBox x:Name="groupGroupNameCombo" HorizontalAlignment="Left" Margin="368,123,0,0" VerticalAlignment="Top" Width="226" Height="31" SelectionChanged="groupGroupNameCombo_SelectionChanged"  DisplayMemberPath="GroupName" SelectedValuePath="CategoriesVal" SelectedValue="{Binding Categories}"/>
                </Grid>

我的 POCO 如下:-

        public class Test: INotifyPropertyChanged
        {
            public Test()
            {
            }
     public virtual string TestId { get; set; }
            public virtual Categories CategoriesVal { get; set; }
     public virtual string Name{ get; set; }

    public virtual string GroupName
            {
                get { return Name; }
                set
                {
                    Name = value;
                    OnPropertyChanged("GroupName");
                }
            }
    }

public class Categories : INotifyPropertyChanged
        {
            public Categories ()
            {
            }
 public virtual string CategorieId { get; set; }
     public virtual string Name{ get; set; }

    public virtual string GroupName
            {
                get { return Name; }
                set
                {
                    Name = value;
                    OnPropertyChanged("GroupName");
                }
            }
    }
}

在我的 backend 代码中,我设置 DataContext 如下:-

Categories cate = new Categories ();
cate.CategorieId = "cate1ID";
cate.GroupName = "CateGroupName1"
Test test = new Test();
test.TestId = "TestID";
test.CategoriesVal  = cate;
test.Name = "TestName1";

groupGroupNameCombo 是使用 ItemsSource 设置的,当我在其工作正常

下设置时,它包含 Categories 上的整个列表
groupGroupNameCombo.SelectedItem = cate;

但是当我设置使用下面的网格时它不会工作:-

groupEditArea.DataContext = test;

谁能指导我如何通过设置网格 DataContext 而不是手动设置 combobox 来设置 combobox

而不是

SelectedValuePath="CategoriesVal" SelectedValue="{Binding Categories}"

SelectedItem="{Binding CategoriesVal}"

SelectedValuePath 表示:属性 的名称(来自 ComboBoxItem DataContex - Categories class 在我们的例子中),SelectedValue 的值来自将提供。
如果您想要表示实例项目(每种形式 Combobox.Items)不是由项目本身完成,而是由一个特征完成,这将很有用。在你的情况下,我看不出有任何意义。

查看更多:Difference between SelectedItem, SelectedValue and SelectedValuePath