无法将数据绑定到silverlight 4数据网格中的自动完成框
我是silverlight的新手,我的任务是将datagrid TextColumns更改为自动完成框。我认为这应该相当简单,但显然不是 我能够从datagrid之外的列表绑定数据,但不能从内部绑定 我已经研究了两天了,我发现的一切似乎都包含了数据库中的数据,或者对我的新手大脑来说太复杂了 我真正需要的只是一个简单的例子和解释,说明如何在datagrid中实现这一点,而不是定期进行 我的代码如下。它成功构建,但无法正常工作 我相信这是许多其他人一定遇到过的问题 我感谢大家的意见, 提前谢谢。 d { 公共部分类主页面:UserControl { 公共主页() { 初始化组件()无法将数据绑定到silverlight 4数据网格中的自动完成框,silverlight,Silverlight,我是silverlight的新手,我的任务是将datagrid TextColumns更改为自动完成框。我认为这应该相当简单,但显然不是 我能够从datagrid之外的列表绑定数据,但不能从内部绑定 我已经研究了两天了,我发现的一切似乎都包含了数据库中的数据,或者对我的新手大脑来说太复杂了 我真正需要的只是一个简单的例子和解释,说明如何在datagrid中实现这一点,而不是定期进行 我的代码如下。它成功构建,但无法正常工作 我相信这是许多其他人一定遇到过的问题 我感谢大家的意见, 提前谢谢。 d
List myList=新列表
{
新ExpData
{Exp=“单元格1”,
Desc=“单元格2”,
Prod=“单元格3”,
Source=“cell 4”,
Start=“单元格5”,
Amt=“单元格6”,
Reset=“cell 7”},
新ExpData
{Exp=“单元8”,
Desc=“单元9”,
Prod=“单元格10”,
Source=“cell 11”,
Start=“单元格12”,
Amt=“单元格13”,
Reset=“cell 14”}
};
AccordionGrid.ItemsSource=myList;
AutoCompGrid2.ItemsSource=myList;
this.accordioItem2.Header=“Accordion Header”;
}
}
公共类ExpData
{
公共字符串Exp{get;set;}
公共字符串Desc{get;set;}
公共字符串Prod{get;set;}
公共字符串源{get;set;}
公共字符串开始{get;set;}
公共字符串重置{get;set;}
公共字符串Amt{get;set;}
public ExpData(字符串exp、字符串desc、字符串prod、字符串源、字符串开始、字符串重置、字符串金额)
{
Exp=Exp;
Desc=Desc;
Prod=Prod;
来源=来源;
开始=开始;
重置=重置;
金额=金额;
}
公共重写字符串ToString()
{
返回经验;
}
如果您有一个视图模型,您的生活会轻松得多。:)使用视图模型解决此问题的快速示例
public class ExpDataViewModel
{
private List<ExpData> _listData;
public ExpDataViewModel()
{
_listData = new List<ExpData>
{
new ExpData
{Exp = "cell 1",
Desc = "cell 2",
Prod = "cell 3",
Source = "cell 4",
Start = "cell 5",
Amt = "cell 6",
Reset = "cell 7"},
new ExpData
{Exp = "cell 8",
Desc = "cell 9",
Prod = "cell 10",
Source = "cell 11",
Start = "cell 12",
Amt = "cell 13",
Reset = "cell 14"}
};
}
public IEnumerable<ExpData> ListData
{
get {return _listData;}
}
public IEnumerable<string> ExpItems
{
get {return _listData.Select(i => i.Exp);
}
}
public类ExpDataViewModel
{
私有列表listData;
public ExpDataViewModel()
{
_listData=新列表
{
新ExpData
{Exp=“单元格1”,
Desc=“单元格2”,
Prod=“单元格3”,
Source=“cell 4”,
Start=“单元格5”,
Amt=“单元格6”,
Reset=“cell 7”},
新ExpData
{Exp=“单元8”,
Desc=“单元9”,
Prod=“单元格10”,
Source=“cell 11”,
Start=“单元格12”,
Amt=“单元格13”,
Reset=“cell 14”}
};
}
公共IEnumerable列表数据
{
获取{return\u listData;}
}
公共IEnumerable可扩展项
{
获取{return}listData.Select(i=>i.Exp);
}
}
然后您需要更改您的视图:
<UserControl xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"
xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit" x:Class="AccordionAutoCompleteBox.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="[Your ViewModel's Namespace]"
mc:Ignorable="d"
d:DesignHeight="680" d:DesignWidth="1240">
<UserControl.Resources>
<vm:ExpDataViewModel x:Key="vm" />
</UserControl.Resource>
<Grid x:Name="LayoutRoot" Background="White" DataContext="{StaticResource vm}">
<StackPanel VerticalAlignment="Center">
<toolkit:AccordionItem x:Name="AccordionItem2" FontSize="12" Background="LightBlue" BorderBrush="Wheat" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" IsSelected="False" MaxHeight="400">
<sdk:DataGrid Name="AccordionGrid" ItemsSource="{Binding ListData}" AutoGenerateColumns="False" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" HeadersVisibility="All" BorderThickness="1" Margin="8" SelectionMode="Single" Canvas.ZIndex="-1" MaxHeight="360">
<sdk:DataGrid.Columns>
<sdk:DataGridTemplateColumn Header="Exp">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<sdk:AutoCompleteBox x:Name="AutoCompGrid" Text="{Binding Exp, Mode=TwoWay}" ItemsSource="{Binding Path=ExpItems, Source={StaticResource vm}}" IsTextCompletionEnabled="True" />
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
<sdk:DataGridTextColumn Header="Exp" Binding="{Binding Exp}" IsReadOnly="False" />
<sdk:DataGridTextColumn Header="Desc" Binding="{Binding Desc}" IsReadOnly="False" />
<sdk:DataGridTextColumn Header="Prod" Binding="{Binding Prod}" IsReadOnly="False" />
<sdk:DataGridTextColumn Header="Source" Binding="{Binding Source}" IsReadOnly="False" />
<sdk:DataGridTextColumn Header="Start" Binding="{Binding Start}" IsReadOnly="False" />
<sdk:DataGridTextColumn Header="Reset" Binding="{Binding Reset}" IsReadOnly="False" />
<sdk:DataGridTextColumn Header="Amt" Binding="{Binding Amt}" IsReadOnly="False" />
</sdk:DataGrid.Columns>
</sdk:DataGrid>
</toolkit:AccordionItem>
<!-- not sure what this is supposed to be bound to -->
<sdk:AutoCompleteBox x:Name="AutoCompGrid2" Text="{Binding Exp}" ItemsSource="{Binding Exp}" IsTextCompletionEnabled="False" />
</StackPanel>
</Grid>
您可以从代码隐藏文件中删除所有自定义代码。您正在将自动完成框的itemssource绑定到与文本相同的属性。您是否试图获取所有Exp值的列表,并让用户从中进行选择?是的,这正是我试图做的。我尝试了许多方法,但只能似乎是如上所述的联系。我在过去两天做的所有研究都给了我答案的提示,但到目前为止没有任何效果。布莱恩特,非常感谢你为我提供了这个。我已经尝试过了,它解决了我的问题。但是我确实有一个小问题,下拉选择是不可见的,但这很简单可能只是某个地方的属性发生了变化。我明天将花一些时间复习这个视图模型类。就像我说的,我对这整件事还不熟悉,所以在我理解它的工作原理之前,这里有很多逻辑需要消化。再次感谢!不客气!(顺便说一句,如果它确实回答了你的问题,你应该将它标记为已回答)
List<ExpData> myList = new List<ExpData>
{
new ExpData
{Exp = "cell 1",
Desc = "cell 2",
Prod = "cell 3",
Source = "cell 4",
Start = "cell 5",
Amt = "cell 6",
Reset = "cell 7"},
new ExpData
{Exp = "cell 8",
Desc = "cell 9",
Prod = "cell 10",
Source = "cell 11",
Start = "cell 12",
Amt = "cell 13",
Reset = "cell 14"}
};
AccordionGrid.ItemsSource = myList;
AutoCompGrid2.ItemsSource = myList;
this.AccordionItem2.Header = " Accordion Header ";
}
}
public class ExpData
{
public String Exp { get; set; }
public String Desc { get; set; }
public String Prod { get; set; }
public String Source { get; set; }
public String Start { get; set; }
public String Reset { get; set; }
public String Amt { get; set; }
public ExpData(String exp, string desc, string prod, string source, string start, String reset, String amt)
{
Exp = exp;
Desc = desc;
Prod = prod;
Source = source;
Start = start;
Reset = reset;
Amt = amt;
}
public override string ToString()
{
return Exp;
}
public class ExpDataViewModel
{
private List<ExpData> _listData;
public ExpDataViewModel()
{
_listData = new List<ExpData>
{
new ExpData
{Exp = "cell 1",
Desc = "cell 2",
Prod = "cell 3",
Source = "cell 4",
Start = "cell 5",
Amt = "cell 6",
Reset = "cell 7"},
new ExpData
{Exp = "cell 8",
Desc = "cell 9",
Prod = "cell 10",
Source = "cell 11",
Start = "cell 12",
Amt = "cell 13",
Reset = "cell 14"}
};
}
public IEnumerable<ExpData> ListData
{
get {return _listData;}
}
public IEnumerable<string> ExpItems
{
get {return _listData.Select(i => i.Exp);
}
}
<UserControl xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"
xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit" x:Class="AccordionAutoCompleteBox.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="[Your ViewModel's Namespace]"
mc:Ignorable="d"
d:DesignHeight="680" d:DesignWidth="1240">
<UserControl.Resources>
<vm:ExpDataViewModel x:Key="vm" />
</UserControl.Resource>
<Grid x:Name="LayoutRoot" Background="White" DataContext="{StaticResource vm}">
<StackPanel VerticalAlignment="Center">
<toolkit:AccordionItem x:Name="AccordionItem2" FontSize="12" Background="LightBlue" BorderBrush="Wheat" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" IsSelected="False" MaxHeight="400">
<sdk:DataGrid Name="AccordionGrid" ItemsSource="{Binding ListData}" AutoGenerateColumns="False" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" HeadersVisibility="All" BorderThickness="1" Margin="8" SelectionMode="Single" Canvas.ZIndex="-1" MaxHeight="360">
<sdk:DataGrid.Columns>
<sdk:DataGridTemplateColumn Header="Exp">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<sdk:AutoCompleteBox x:Name="AutoCompGrid" Text="{Binding Exp, Mode=TwoWay}" ItemsSource="{Binding Path=ExpItems, Source={StaticResource vm}}" IsTextCompletionEnabled="True" />
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
<sdk:DataGridTextColumn Header="Exp" Binding="{Binding Exp}" IsReadOnly="False" />
<sdk:DataGridTextColumn Header="Desc" Binding="{Binding Desc}" IsReadOnly="False" />
<sdk:DataGridTextColumn Header="Prod" Binding="{Binding Prod}" IsReadOnly="False" />
<sdk:DataGridTextColumn Header="Source" Binding="{Binding Source}" IsReadOnly="False" />
<sdk:DataGridTextColumn Header="Start" Binding="{Binding Start}" IsReadOnly="False" />
<sdk:DataGridTextColumn Header="Reset" Binding="{Binding Reset}" IsReadOnly="False" />
<sdk:DataGridTextColumn Header="Amt" Binding="{Binding Amt}" IsReadOnly="False" />
</sdk:DataGrid.Columns>
</sdk:DataGrid>
</toolkit:AccordionItem>
<!-- not sure what this is supposed to be bound to -->
<sdk:AutoCompleteBox x:Name="AutoCompGrid2" Text="{Binding Exp}" ItemsSource="{Binding Exp}" IsTextCompletionEnabled="False" />
</StackPanel>
</Grid>