使用 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
我是 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