C# 如何从XAML引用静态类字段
我的XAML引用了以下类:C# 如何从XAML引用静态类字段,c#,wpf,xaml,multibinding,C#,Wpf,Xaml,Multibinding,我的XAML引用了以下类: public static class SearchVariables { public static DataGridCellInfo current_cell_match; public static string current_cell_property; public static void setCurrentCell(Object dgi, DataGridColumn dgc, string property_name)
public static class SearchVariables
{
public static DataGridCellInfo current_cell_match;
public static string current_cell_property;
public static void setCurrentCell(Object dgi, DataGridColumn dgc, string property_name)
{
current_cell_property = property_name;
if (property_name == null)
{
current_cell_match = new DataGridCellInfo();
}
else
{
current_cell_match = new DataGridCellInfo(dgi, dgc);
}
}
}
我想做的是设置一个多绑定转换器,当它发生变化时使用当前单元格匹配。我有以下内容,但它抛出了一个错误,可能需要一些帮助来解决这个问题
<Setter Property="helpers:SearchBehaviours.IsTextMatchFocused">
<Setter.Value>
<MultiBinding Converter="{StaticResource SelectedSearchValueConverter}" FallbackValue="False">
<Binding Path="(helpers:SearchBehaviours.IsFindPopupOpen)" RelativeSource="{RelativeSource Self}"/>
<Binding Path="(helpers:SearchVariables.current_cell_match)" />
</MultiBinding>
</Setter.Value>
</Setter>
[编辑]
应该提到的是,这个类包含一系列附加的属性和行为,因此它位于UI端。这些行为之一设置当前的\u单元格\u匹配。要绑定到静态类中的静态属性,请尝试以下操作:
<Binding Source="{x:Static helpers:SearchVariables.current_cell_match}" />
快乐编码:-)静态成员在属性更改方面可能存在问题。请看一下我刚才问的问题:
Mabe x:Shared将帮助您。用于从XAML访问静态字段。它会引发什么错误?@RohitVats我尝试了Casper下面的示例,但运气不好,您有没有示例?“helpers:SearchVariables”成员无效,因为它没有符合条件的类型名称无法找到成员“SearchVariables”在目标类型上。我为这个错误道歉@Hank。我已将我的答案更新为正确的静态绑定。谢谢。错误已清除。有趣的是,我刚刚在你的扩展答案上创建了一个问题,如果你愿意,你也可以把答案放在那里。所以我有多个行为类,它们都可以访问这个单例类吗?实际上我想我明白了,它就像一个内部类,但是如果我把我所有的行为类放在一个父类中,我就不能完成上面的工作吗?是的,你所有的行为类都可以访问singleton实例并绑定到它的属性(如果需要的话)。使用x:Shared时出错。。。XML命名空间“”中不存在标记“Shared”
<Binding Source="{x:Static local:MyClass.Instance}" Path="MyInt" />
public class MyClass : INotifyPropertyChanged
{
private Random random;
private int m_MyInt;
public int MyInt
{
get
{
return m_MyInt;
}
set
{
if ( m_MyInt == value )
{
return;
}
m_MyInt = value;
NotifyPropertyChanged();
}
}
private static MyClass m_Instance;
public static MyClass Instance
{
get
{
if ( m_Instance == null )
{
m_Instance = new MyClass();
}
return m_Instance;
}
}
private MyClass()
{
random = new Random();
m_MyInt = random.Next( 0, 100 );
Timer timer = new Timer();
timer.Interval = 1000;
timer.Elapsed += timer_Elapsed;
timer.Start();
}
private void timer_Elapsed( object sender, ElapsedEventArgs e )
{
MyInt = random.Next( 0, 100 );
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged( [CallerMemberName] String propertyName = "" )
{
if ( PropertyChanged != null )
{
PropertyChanged( this, new PropertyChangedEventArgs( propertyName ) );
}
}
#endregion
}