Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.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# 通过静态资源进行WPF绑定_C#_Wpf_Xaml_Binding_Resources - Fatal编程技术网

C# 通过静态资源进行WPF绑定

C# 通过静态资源进行WPF绑定,c#,wpf,xaml,binding,resources,C#,Wpf,Xaml,Binding,Resources,给定以下Xaml: <Window.Resources> <System:String x:Key="StringValue"></System:String> </Window.Resources> <Grid> <ComboBox Margin="137,101,169,183" ItemsSource="{Binding collection}" SnapsToDevicePixels="Tr

给定以下Xaml:

<Window.Resources>
    <System:String x:Key="StringValue"></System:String>
</Window.Resources>
    <Grid>
        <ComboBox Margin="137,101,169,183" ItemsSource="{Binding collection}" SnapsToDevicePixels="True" IsHitTestVisible="true">
        <ComboBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                <CheckBox Command="{Binding CheckCommand}" IsChecked="{Binding IsChecked}" Content="{Binding Name}"/>
                    <TextBlock Text="{StaticResource StringValue}" />
                </StackPanel>
            </DataTemplate>
        </ComboBox.ItemTemplate>
    </ComboBox>
</Grid>

我想要的是将Textblock文本绑定到一个静态资源,该静态资源被数据绑定到ViewModel上的一个值。问题是System.String似乎不允许数据绑定。有人知道这样做的方法吗?对于上下文,TextBlock需要与其父combobox不同的itemssource


谢谢。

为了澄清这一点,
系统.String
没有依赖属性,因此您无法对其进行任何绑定。我认为您需要一个转换器,以便您的TextBlock可以绑定到视图模型。视图模型上有哪种类型的
ObservableCollection

如果只想将简单字符串绑定到text属性,请编辑。这是错误的答案。如果要绑定到格式化文本,请继续阅读

我以前有过这个问题。我想将我的
TextBlock
绑定到属性中的字符串资源。最后,我将
TextBlock
子类化为BindableTextBlock,并将
string
转换为
Inline
列表


这似乎有点牵连,应该有更简单的方法。然而,每当我需要绑定到一些格式化文本时,我都会多次恢复控件,并且它可以正常工作。希望您能从我的工作中受益,并可能有所改进。

字符串不允许绑定,因为它不是DependencyObject(并且不实现INotifyPropertyChanged)

但是为什么不直接绑定到ViewModel中的值呢

如果无法绑定到ViewModel(考虑具有搜索父类型的RelativeSource),则可以实现包装器(实现INotifyPropertyChanged以获取对象中的更改)

包装类示例:

public class BindWrapper<T> : INotifyPropertyChanged
{
    private T _Content;
    public T Content
    {
        get
        {
            return _Content; 
        }
        set
        {
            _Content = value;
            if (this.PropertyChanged != null)
                this.PropertyChanged(this, new PropertyChangedEventArgs("Content"));
        }
    }


    #region INotifyPropertyChanged Members

    public event PropertyChangedEventHandler PropertyChanged;

    #endregion
}
公共类BindWrapper:INotifyPropertyChanged
{
私有T_内容;
公共内容
{
得到
{
返回内容;
}
设置
{
_内容=价值;
if(this.PropertyChanged!=null)
this.PropertyChanged(这是新的PropertyChangedEventArgs(“内容”);
}
}
#区域INotifyProperty更改成员
公共事件属性更改事件处理程序属性更改;
#端区
}
如何在XAML中实例化和绑定:

<Window.Resources>
    <local:BindWrapper x:Key="wrapper" x:TypeArguments="System:String">
        <local:BindWrapper.Content>
            <System:String>huuu</System:String>
        </local:BindWrapper.Content>
    </local:BindWrapper>
</Window.Resources>
<TextBlock Text="{Binding Source={StaticResource wrapper}, Path=Content}" />

胡乌

您是否在mscorlib中包含别名
xmlns:System=“clr namespace:System;assembly=mscorlib”
不会出现任何错误。请查看我的编辑,找到一个可能的包装类,该类允许检测字符串的更新,我无法直接绑定到该值,因为textblock父级(combobox)在VM中有一个可观察集合的itemsource。它不允许我将文本块从中分离出来。@Darren Young,它是
observedcollection
还是
observedcollection
还是其他什么?