嗨,请原谅我的英语不好。
嗯......我正在尝试绑定到一个对象列表来填充我的ItemsControl。 Object表示从配置文件中获取的一对名称和设置值。目的是制作一些设置编辑器,将编辑后的数据保存回文件。
对象非常简单:
MySettings
{
public string Name { get; set; }
public string Value { get; set; }
}
有一些简单的标记(这是草图,而不是确切的项目):
<ItemsControl Name="myItmCtrl">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<!--Name of the property-->
<TextBlock Text="{Binding Name}" />
<!--Its value-->
<TextBox Text="{Binding Value}" />
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
最后我在代码隐藏中添加myItmCtrl.ItemsSource = List<MySettings>;
。
这一切都很好,因为它很好。
然后我决定推进我的表单,因为一些Value
s(都存储为字符串)可以取值"TRUE"
和"FALSE"
,可以很容易地转换为{ {1}}。因此,在某些情况下,我不想输入TRUE或FALSE,而是希望通过有点不同的UIElement - bool
来表示这些值,然后绑定到它的CheckBox
属性。
所以,我希望字符串值由IsChecked
es表示,bool值由TextBox
es表示。我可以在代码隐藏中实现它,并通过CheckBox
循环创建元素,但我没有。我们的想法是找到一些棘手的扩展,它可以在XAML中描述所有这些扩展(或者一些50/50 xaml / code-behind)。
非常感谢
答案 0 :(得分:0)
最好的解决方案是使用ValueConverter
来转换字符串和bool值。由于我们已经有了一些很好的方法来将字符串转换为布尔值,反之亦然,这不应该是一个问题。您可以像amnezjak所描述的文章一样构建自己的ValueConverter
。
TextBox
的绑定可能如下:
<TextBox Text="{Binding Value, Converter={StaticResource myConverter}}"/>
myConverter
是您导入的实际转换器的关键。