我有一个public class LPosition
,其中包含一个属性public String OZ { get; set; }
。应用程序读取.txt和.xml文件,OZ从这些文件中获取值。我需要将OZ绑定到comboBox:
<ComboBox x:Name="OZs" SelectionChanged="OZs_SelectionChanged" Margin="-10,0,10,1" Grid.Column="0" Grid.Row="1" Height="27" VerticalAlignment="Bottom">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding OZ}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
如您所见,我尝试使用DataTemplate实现数据绑定,但它并不起作用。我知道可以用ItemsSource实现数据绑定,但为此我需要一个ObservableCollection,我没有,我也不知道如何从OZ创建它。我看过许多ObservableCollection硬编码的例子,我知道如何在硬编码的情况下使用它,但我不知道在我的情况下该做什么。
很抱歉,如果说明不明确,我对WPF很新。而且我对这个问题很失落。任何帮助,将不胜感激。
编辑:根据@ Xiaoy312的回答,我添加了以下代码:
public IEnumerable<LPosition> OZList { get; set; }
public FormelAssistent()
{
InitializeComponent();
this.DataContext = this;
OZs.ItemsSource = OZList;
}
和XAML:
<ComboBox x:Name="OZs"
SelectionChanged="OZs_SelectionChanged"
Margin="-10,0,10,1"
Grid.Column="0"
Grid.Row="1"
Height="27"
VerticalAlignment="Bottom"
ItemsSource="{Binding OZList}"
DisplayMemberPath="OZ" />
但它不起作用:(
答案 0 :(得分:0)
您需要提供ComboBox
的内容列表(选项),以便通过其ItemsSource
属性进行选择。您不一定需要使用ObservableCollection
支持它。仅当您计划在呈现视图时添加/删除集合时。任何IEnumerable
也可以。
<ComboBox x:Name="OZs"
ItemsSource="{Binding ListOrIEnumerableOfLPosition}"
DisplayMemberPath="OZ" <- you can also use this instead of setting an item template, unless you need something complex
...>
...
</ComboBox >
答案 1 :(得分:0)
如果您在类上实现INotifyPropertyChanged
接口,那么它应该可以正常工作。
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string PropertyName = "")
{
if(PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(PropertyName));
}
}
private IEnumerable<string> _oz;
public IEnumerable<string> Oz
{
get
{
return _oz;
}
set
{
_oz = value;
NotifyPropertyChanged("Oz");
}
}
如果您碰巧使用依赖项对象,则可以改为使用依赖项属性。如果有选择,这将是我的首选方案。
public IEnumerable<string> Oz
{
get { return (IEnumerable<string>)GetValue(OzProperty); }
set { SetValue(OzProperty, value); }
}
public static readonly DependencyProperty OzProperty = DependencyProperty.Register("Oz", typeof(IEnumerable<string>), typeof(MainWindow), new PropertyMetadata(null));
值得指出的是,如果容器没有实现INotifyCollectionChanged
(例如ObservableCollection
),那么当整个列表被替换为ComboBox
时,您只会看到ObservableCollection
的更新分配
如果你真的不能使用-- Pivot table with one row and five columns
SELECT 'AverageCost' AS Cost_Sorted_By_Production_Days,
[0], [1], [2], [3], [4]
FROM
(SELECT DaysToManufacture, StandardCost
FROM Production.Product) AS SourceTable
PIVOT
(
AVG(StandardCost)
FOR DaysToManufacture IN ([0], [1], [2], [3], [4])
) AS PivotTable;
,你可以在get和set中通知。