gpt4 book ai didi

c# - 如何从 XAML 引用静态类字段

转载 作者:太空狗 更新时间:2023-10-30 00:31:41 25 4
gpt4 key购买 nike

我的 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)
{
current_cell_property = property_name;
if (property_name == null)
{
current_cell_match = new DataGridCellInfo();
}
else
{
current_cell_match = new DataGridCellInfo(dgi, dgc);
}
}
}

我想做的是设置一个 MultiBinding 转换器,它在更改时使用 current_cell_match。我有以下但它抛出错误可以使用一些帮助来解决这个问题。

<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 方面。这些行为之一设置了 current_cell_match。

最佳答案

要绑定(bind)到静态类中的静态属性,请尝试以下操作:

<Binding Source="{x:Static helpers:SearchVariables.current_cell_match}" />

但是当值发生变化时,这不会在 View 中更新。要更新 View ,您需要实现接口(interface) INotifyPropertyChanged。但这在使用静态属性时可能会非常棘手。相反,我会建议实现单例模式,并使您的静态属性成为“普通”属性。静态类和单例模式之间的区别并不大。所以这可能是您要走的路。

这是一个例子。 Xaml:

<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
}

快乐编码:-)

关于c# - 如何从 XAML 引用静态类字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23864495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com