我試圖綁定到下面DataGrid
中StringValue
對象的集合。但是每個項目都顯示在單獨的行中。WPF中的TreeView中的DataGrid
我希望它有一個柱狀顯示。例如,值565477和65656應該顯示在一行中。
XAML:
<TreeView>
<TreeViewItem Header="Warnings">
<TreeView ItemsSource="{Binding WarningCategories}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Path=Warnings}">
<TextBlock Text="{Binding Path=Category}" />
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<DataGrid ItemsSource="{Binding Fields}" AutoGenerateColumns="True" HeadersVisibility="None">
</DataGrid>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
</TreeViewItem>
</TreeView>
代碼隱藏:
public class ViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public ObservableCollection<WarningCategory> WarningCategories { get; set; }
public ViewModel()
{
WarningCategories = new ObservableCollection<WarningCategory>();
ObservableCollection<Warning> warnings = new ObservableCollection<Warning>
{
new Warning(new StringValue("565477"), new StringValue("65656")),
new Warning(new StringValue("767455"), new StringValue("75642")),
};
WarningCategories.Add(new WarningCategory("Warning One", warnings));
warnings = new ObservableCollection<Warning>
{
new Warning(new StringValue("565477"), new StringValue("65656")),
new Warning(new StringValue("767455"), new StringValue("75642")),
};
WarningCategories.Add(new WarningCategory("Warning Two", warnings));
}
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
var handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
}
public class WarningCategory
{
public string Category { get; set; }
private ObservableCollection<Warning> m_warnings;
public ObservableCollection<Warning> Warnings
{
get
{
return m_warnings ?? (m_warnings = new ObservableCollection<Warning>());
}
}
public WarningCategory(string category, ObservableCollection<Warning> animals)
{
Category = category;
m_warnings = animals;
}
}
public class Warning
{
public ObservableCollection<StringValue> Fields { get; set; }
public Warning(params StringValue[] fields)
{
Fields = new ObservableCollection<StringValue>(fields);
}
}
public class StringValue
{
public StringValue(string s)
{
Value = s;
}
public string Value { get; set; }
}
我想最後的結果是這樣的:
我的解決方法到目前爲止,但遺憾的是它不支持多選!
<ItemsControl ItemsSource="{Binding Fields}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Value}" Width="150"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
你真的想要在數據網格中有多行嗎?爲什麼你使用數據網格? –
@DanField實際上沒有。但我想能夠選擇整行。我發現DataGrid中的功能 - – Vahid
您可以在文章中添加一些內容,以顯示您期望最終輸出的樣子嗎? –