Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 以非默认方式显示双对象集合_C#_Wpf_Data Binding - Fatal编程技术网

C# 以非默认方式显示双对象集合

C# 以非默认方式显示双对象集合,c#,wpf,data-binding,C#,Wpf,Data Binding,我想显示双对象的集合 以下代码可以正常工作: namespace WpfApplication4 { public partial class MainWindow : Window { public ObservableCollection<double> collection1 { get; set; } public MainWindow() { InitializeComponent(); collection1=ne

我想显示双对象的集合

以下代码可以正常工作:

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;

    }
}
命名空间WpfApplication4
{
公共部分类主窗口:窗口
{
公共ObservableCollection集合1{get;set;}
公共主窗口()
{
初始化组件();
collection1=新的ObservableCollection();
对于(双d=0.0;d<1.0;d+=0.1)
{
瓦托西纳米添加(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 双向绑定需要路径或XPath

我想我应该在
{Binding}
中写点什么,但它是什么?

试试这个:

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

编辑: 我对此有了更多的思考,但事实上,这种方式是行不通的。 您尝试做的实际上与尝试为参数分配新值是一样的,这就是双向绑定无法工作的原因

一种方法是在double周围有一个包装器,因此包装器对象不会被更改,但您可以访问和更改包装器中的double值

包装类:

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

...

public ObservableCollection<WrapClass> Collection1 { get; set; }
公共类WrapClass
{
公共双值{get;set;}
}
...
公共ObservableCollection集合1{get;set;}
您的XAML:

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


我希望这有助于

正常工作,但此解决方案的数据绑定不起作用-当我更改显示的文本框中的值时,当我在调试时检查它们时,它不会影响集合中的值。是的,这是单向的意思。它只会从您的属性更新到GUI,而不会从另一个方向更新。如果您想要双向绑定,这就是不是解决方案。我认为@Somedust给出的解决方案应该有效。不幸的是,它不起作用,结果与您的解决方案相同。工作正常,但此解决方案数据绑定不起作用-当我更改显示的文本框中的值时,当我在调试时检查它们时,它不会影响集合中的值。