如何在WPF绑定中返回UIElement或XAML作为内容

时间:2014-06-02 10:57:41

标签: c# wpf xaml wpf-controls

嗨,请原谅我的英语不好。

嗯......我正在尝试绑定到一个对象列表来填充我的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)。

非常感谢

1 个答案:

答案 0 :(得分:0)

最好的解决方案是使用ValueConverter来转换字符串和bool值。由于我们已经有了一些很好的方法来将字符串转换为布尔值,反之亦然,这不应该是一个问题。您可以像amnezjak所描述的文章一样构建自己的ValueConverter

TextBox的绑定可能如下:

<TextBox Text="{Binding Value, Converter={StaticResource myConverter}}"/>

myConverter是您导入的实际转换器的关键。