XAML
<UserControl x:Class="PatientsInscrit_GMF.ListDisplay"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:custom="clr-namespace:PatientsInscrit_GMF"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="25"></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<ListView Grid.Row="1" Margin="0,0,0,0" x:Name ="FileList">
<ListView.View>
<GridView>
<GridViewColumn Header="Tag" Width="Auto">
<GridViewColumn.CellTemplate>
<DataTemplate>
<ComboBox ></ComboBox>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
</Grid>
</UserControl>
.CS
namespace PatientsInscrit_GMF
{
public partial class ListDisplay : UserControl
{
private ObservableCollection<string> _tags;
public ObservableCollection<string> Tags
{
get { return _tags; }
}
public ListDisplay()
{
InitializeComponent();
_tags = new ObservableCollection<string>();
List<string> tags = Facade.Instance.RetrieveTags();
foreach(string s in tags)
{
_tags.Add(s);
}
}
}
}
如何将标签绑定到我的Combobox,这是我列表视图中的众多列之一?
我试过
ItemsSource = "{Binding Tags}"
但是这个组合框仍然是空的。我确信Facade List检索不是空的,因为它创建时我添加了2个默认标签,因此它不是空的。
我已经尝试过各种其他解决方案,我发现并且没有任何工作,甚至还有代码示例甚至无法编译。
请帮助:)
答案 0 :(得分:1)
我相信在(最初)提取Tags
属性时,_tags
尚未初始化。初始化_tags
后,您可以提升Tags
属性更改(通过实施INotifyPropertyChanged
)。然而,该属性似乎只需要初始化(更改)一次。因此,实现这样的接口并不是必需的。您可以尝试以下代码以确保在获取Tags
时,数据将被初始化:
public ObservableCollection<string> Tags {
get {
if(_tags == null){
//move your code after InitializeComponent() to here
_tags = new ObservableCollection<string>();
List<string> tags = Facade.Instance.RetrieveTags();
foreach(string s in tags) {
_tags.Add(s);
}
}
return _tags;
}
}
在XAML中:
<ComboBox ItemsSource="{Binding Tags,
RelativeSource={RelativeSource AncestorType=UserControl}}"></ComboBox>
答案 1 :(得分:1)
为了DataBind,请遵循以下内容:
1)确保已将DataContext(在UserControl标记中)设置为DataContext="{Binding RelativeSource={RelativeSource Self}}"
2)您需要将ComboBox中的ItemsSource绑定更改为:ItemsSource="{Binding SomePropertyName}"
3)你需要实现`INotifyPropertyChanged&#39;在后台cs文件中
4)要实现此属性,请使用以下命令:
#region INotifyPorpertyChanged Memebers
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged(string propertyName = "")
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
5)创建所需对象类型的ObservableCollection
类型的属性。此属性是ComboBoxis所限定的属性。
例如:
private ObservableCollection<SomeDataType> _myPrivateData;
public ObservableCollection<SomeDataType> SomePropertyName { get { return _myPrivateData; } set { _myPrivateData= value; NotifyPropertyChanged("SomePropertyName"); } }
负责数据绑定部分。现在每次重置DataGrid绑定到DataGrid的集合都会更新,因为调用了NotifyPropertyChanged。