C# 通过静态资源进行WPF绑定
给定以下Xaml: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
<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
还是其他什么?