以非默认方式显示双重对象的集合

时间:2013-12-03 13:15:00

标签: c# wpf data-binding

我想显示双重对象的集合。

以下代码正常运行:

namespace WpfApplication4
{
public partial class MainWindow : Window
{
    public ObservableCollection<double> collection1 { get; set; }

    public MainWindow()
    {
        InitializeComponent();
        collection1=new ObservableCollection<double>();

        for (double d = 0.0; d < 1.0; d += 0.1)
        {
            nm.wartosci.Add(d);
        }

        DataContext=this;

    }
}

XAML文件:

<Window x:Class="WpfApplication4.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Grid>

    <ListView ItemsSource="{Binding wartosci}" >
        <ListView.ItemsPanel>
            <ItemsPanelTemplate>
                <WrapPanel />
            </ItemsPanelTemplate>
        </ListView.ItemsPanel>
    </ListView>
</Grid>
</Window>

但是如果我想以不同的方式显示对象呢?当我将DataTemplate添加到ListView时,它看起来如下所示:

<ListView ItemsSource="{Binding wartosci}" >
        <ListView.ItemsPanel>
            <ItemsPanelTemplate>
                <WrapPanel />
            </ItemsPanelTemplate>
        </ListView.ItemsPanel>
        <ListView.ItemTemplate>
            <DataTemplate>
                <TextBox Text="{Binding}"/>
            </DataTemplate>
        </ListView.ItemTemplate>
 </ListView>

Visual Studio返回异常:

XamlParseException未处理 双向绑定需要Path或XPath。

我想我应该写一些内容{Binding},但它是什么?

2 个答案:

答案 0 :(得分:1)

试试这个:

<ListView.ItemTemplate>
    <DataTemplate>
        <TextBox Text="{Binding Path=.}"/>
    </DataTemplate>
</ListView.ItemTemplate>

答案 1 :(得分:1)

编辑: 我对此有了更多的考虑,实际上它无法正常工作。 您尝试做的事实上与尝试为参数分配新值实际上是一回事。这就是为什么TwoWay绑定无法工作的原因。

这样做的一种方法是在你的双人身边放一个包装。因此,包装器对象不会更改,但您可以访问并更改包装器内的double值。

WrapperClass:

public class WrapClass
{
    public double Value { get; set; }
}

...

public ObservableCollection<WrapClass> Collection1 { get; set; }

您的XAML:

<ListView.ItemTemplate>
    <DataTemplate>
        <TextBox Text="{Binding Value }"/>
    </DataTemplate>
</ListView.ItemTemplate>

我希望这会有所帮助