我在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>
从“编辑模式”和“正常模式”切换工作,问题是TextBox或TextBox都没有显示文本。 我已经尝试了各种类型的DataBinding,但我无法让它工作。
有没有人有想法?
我很抱歉我已经这么久了,但我不知道如何解释它。
感谢大家! :)
答案 0 :(得分:1)
你完全把情况弄得一团糟。只需为您的DataTemplate
类定义Dosaggio
,如下所示:
<DataTemplate DataType="{x:Type Dosaggio}">
<TextBox Text="{Binding IDColtura}" IsReadOnly="{Binding IsNotEditing}" />
</DataTemplate>
您最好使用TextBox.IsReadOnly
属性使TextBox
无法使用,但您需要撤消InEditing
属性的极性才能使其正常工作并重命名它到IsNotEditing
。此外,如果此Dosaggio
课程中的此属性不,则您必须更改Binding
才能访问它。
供将来参考:
您不需要使用两个DataTrigger
来执行您在示例中所做的操作。你可以这样做:
<Style TargetType="{x:Type ContentControl}">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock Text="{Binding IDColtura}"/>
</DataTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<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>
UPADTE&gt;&gt;&gt;
如果您要使用ContentControl
,则需要设置其Content
属性:
<ContentControl Content="{Binding}">
...
</ContentControl>