【发布时间】:2014-03-02 02:30:17
【问题描述】:
我遇到了 WPF 中的 ListView 的问题。 我的程序有两个 ListView 控件:一个使用数据绑定绑定到我的 Window 内的 ObservableCollection,另一个绑定到第一个集合的每个项目内的 ObservableCollection。
像这样:
public class Fitosanitario : DBData
{
private ObservableCollection<Dosaggio> _dosaggi;
public ObservableCollection<Dosaggio> Dosaggi { set { _dosaggi = value; } get { return _dosaggi; } }
...
}
public class Dosaggio : DBData
{
private int _idColtura;
public int IDColtura
{
get { return _idColtura; }
set { _idColtura = value; }
}
...
}
而这两个列表是这样定义的:
我的 Window 中的 ObservableCollection,第一个 ListView 将数据绑定到
private ObservableCollection<Fitosanitario> _fitosanitari;
public ObservableCollection<Fitosanitario> Fitosanitari
{
get { return _fitosanitari; }
}
第一个 ListView 的 XAML
<ListView Grid.Row="1" Margin="5" Name="lstProdottiFito">
<ListView.View>
<GridView>
<GridViewColumn Header="Nome" Width="120" DisplayMemberBinding="{Binding Nome}" />
<GridViewColumn Header="Quantità" Width="80" DisplayMemberBinding="{Binding Quantita}" />
<GridViewColumn Header="Descrizione" Width="135" DisplayMemberBinding="{Binding Descrizione}" />
</GridView>
</ListView.View>
</ListView>
第二个 ListView 的 XAML
<ListView Grid.Column="2" Margin="5" ItemsSource="{Binding SelectedItem.Dosaggi, ElementName=lstProdottiFito}" x:Name="lstDosaggi">
...
</ListView>
目前一切正常。我的问题是第二个 ListView 必须是可编辑的,为了做到这一点,我以这种方式为 eact GridColumn 定制了它的 CellTemplate (带有一些触发器来启用和禁用编辑)(这是第一列的示例,但他们都是平等的):
<GridViewColumn Header="IDColtura" Width="80">
<GridViewColumn.CellTemplate>
<DataTemplate>
<ContentControl>
<ContentControl.Style>
<Style TargetType="{x:Type ContentControl}">
<Style.Triggers>
<DataTrigger Binding="{Binding InEditing}" Value="False">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock Text="{Binding IDColtura}"/>
</DataTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding InEditing}" Value="True">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBox Text="{Binding IDColtura, Mode=OneWay}"/>
</DataTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
并且从“编辑模式”和“正常模式”的切换工作,问题是文本框或文本框都没有显示文本。 我已经尝试了所有类型的 DataBinding,但我无法让它工作。
有人有想法吗?
对不起,我已经这么久了,但我不知道如何解释。
谢谢大家! :)
【问题讨论】:
-
它是什么:
SelectedItem.Dosaggi在第二个 ListView XAML 定义中?可能只应该是SelectedItem吗? -
SelectedItem 指向在第一个 ListView 上选择的项目,在我的例子中是 Fitosanitario 类型。所以 SelectedItem.Dosaggi 指向 Fitosanitario 类中的 ObservableCollecation 调用“Dosaggi”。如果我只是放置 SelectedItem 而不是 SelectedItem.Dosaggi,则第二个列表始终为空。