我想绑定Dictionary<string, int>到ListViewWPF中.我希望做这样一种方式,Values在Dictionary通过数据绑定机制得到更新.我不想改变Keys那个Values.我也不在乎添加新的映射Dictionary.我只是想更新现有的.
设置词典为ItemsSource的ListView不做到这一点.它不起作用,因为ListView使用Enumerator访问其内容,Dictionary并且该枚举的元素是不可变KeyValuePair对象.
我目前的调查尝试使用该Keys属性.我将此分配给我的ItemsSource属性ListView.这并不让我来显示Keys,但我不知道有足够的了解WPF的数据绑定机制来访问Values的Dictionary.
我发现了这个问题:在XAML中访问codebehind变量但仍然无法弥合差距.
你们中的任何人都知道如何使这种方法有效吗?有没有人有更好的方法?
看来,作为最后的手段,我可以构建一个自定义对象并将其粘贴List到我重新创建/更新我的内容中,Dictionary但这似乎是一种绕过内置数据绑定功能而不是有效利用它的方法.
你能绑定到这样的局部变量吗?
SystemDataBase.cs
namespace WebWalker
{
public partial class SystemDataBase : Window
{
private string text = "testing";
...
Run Code Online (Sandbox Code Playgroud)
SystemDataBase.xaml
<TextBox
Name="stbSQLConnectionString"
Text="{SystemDataBase.text}">
</TextBox>
Run Code Online (Sandbox Code Playgroud)
??
文本设置为局部变量"text"
我能够在xaml中声明一个整数或双精度值.但是,我无法添加小数值.它建立好,但后来我得到:
System.Windows.Markup.XamlParseException:找不到类型"Decimal".
这是xaml代码:
<UserControl.Resources>
<system:Int32 x:Key="AnIntValue">1000</system:Int32><!--Works!-->
<system:Double x:Key="ADoubleValue">1000.0</system:Double><!--Works!-->
<system:Decimal x:Key="ADecimalValue">1000.0</system:Decimal><!--Fails at runtime-->
</UserControl.Resources>
Run Code Online (Sandbox Code Playgroud)
这是我如何声明系统命名空间:
xmlns:system="clr-namespace:System;assembly=mscorlib"
Run Code Online (Sandbox Code Playgroud)
编辑:解决方法: 正如史蒂文所提到的,通过代码隐藏添加资源似乎工作正常:
Resources.Add("ADecimalValue", new Decimal(1000.0));
Run Code Online (Sandbox Code Playgroud)
编辑:答案: 在WPF中做同样的事情似乎工作正常.所以我猜这是一个隐藏的银光限制.感谢Steven的这一发现.
我有一个ListBox,我将ItemsSource设置为从WCF服务填充的CollectionViewSource.我在ListBox.ItemTemplate\DataTemplate中使用值转换器来转换ItemsSource中对象的属性.
这一切都按预期工作,但现在我需要更新转换过程,以便转换后的值仍然基于单个对象属性值,除非另一个属性等于特定值.并且该值在xaml后面的代码中设置,这是在页面构造函数中设置的字段级变量.
为此,我想将字段级变量作为ValueConverter的ConverterParameter传递.我已经尝试了几种方法,主要使用这个问题的想法,除了我总是得到一个错误解析xaml(并且应用程序无法加载).
一个修复可能是添加属性到ItemsSource中的对象,但我真的不想这样做.部分是因为该对象在几个项目中使用,所以我不想改变我......因为我想看看其他方法是否可行.另外我相信wpf有一个MultiValue转换器(也许是SL 4.0),但我在SL 3.0上.
我的猜测是到目前为止我遇到的问题是因为加载,绑定和解析xaml的时间.
所以有几个问题: