Estou tendo dificuldade para vincular uma propriedade de cadeia estática simples a um TextBox.
Aqui está a classe com a propriedade estática:
public class VersionManager
{
private static string filterString;
public static string FilterString
{
get { return filterString; }
set { filterString = value; }
}
}
No meu xaml, eu só quero vincular essa propriedade estática a um TextBox:
<TextBox>
<TextBox.Text>
<Binding Source="{x:Static local:VersionManager.FilterString}"/>
</TextBox.Text>
</TextBox>
Tudo é compilado, mas em tempo de execução, recebo a seguinte exceção:
Não é possível converter o valor no atributo 'Origem' para o objeto do tipo 'System.Windows.Markup.StaticExtension'. Erro no objeto 'System.Windows.Data.Binding' no arquivo de marcação 'BurnDisk; component / selectversionpagefunction.xaml' Linha 57 Posição 29.
Alguma idéia do que estou fazendo de errado?
fonte
Você não pode se ligar a uma estática assim. Não há como a infraestrutura de ligação ser notificada de atualizações, pois não há
DependencyObject
(ou instância de objeto que implementeINotifyPropertyChanged
) envolvida.Se esse valor não mudar, apenas abandone a ligação e use
x:Static
diretamente dentro daText
propriedade. Definaapp
abaixo como o local do espaço para nome (e montagem) da classe VersionManager.Se o valor mudar, sugiro criar um singleton para conter o valor e vincular a ele.
Um exemplo do singleton:
fonte
No .NET 4.5, é possível vincular a propriedades estáticas, leia mais
fonte
No WPF 4.5, é possível vincular diretamente às propriedades estáticas e atualizar automaticamente quando a propriedade é alterada. Você precisa conectar manualmente um evento de alteração para acionar as atualizações de ligação.
Agora você pode vincular sua propriedade estática como qualquer outra:
fonte
VersionManager
classe pode ser estática e tudo ainda funciona. Observe as chaves na definição de caminhoPath=(local:VersionManager.FilterString)
. Alguém sabe por que eles são realmente necessários?Pode haver duas maneiras / sintaxe para vincular uma
static
propriedade. Se p for umastatic
propriedade na classeMainWindow
,binding
fortextbox
será:1
2)
fonte
Você pode usar
ObjectDataProvider
classe e suaMethodName
propriedade. Pode ficar assim:O provedor de dados do objeto declarado pode ser usado assim:
fonte
Se você estiver usando recursos locais, pode consultá-los como abaixo:
fonte
Variante correta para .NET 4.5 +
Código c #
Ligação XAML (atenção aos chavetas são (), não {})
fonte
Veja o meu projeto CalcBinding , que fornece a você expressões complexas no valor da propriedade Path, incluindo propriedades estáticas, propriedades de origem, Math e outras. Então, você pode escrever isso:
Boa sorte!
fonte
Essas respostas são boas se você deseja seguir boas convenções, mas o OP queria algo simples , que é o que eu também queria, em vez de lidar com os padrões de design da GUI. Se tudo o que você quer é ter uma string em um aplicativo GUI básico, você pode atualizar ad-hoc sem nada sofisticado, basta acessá-lo diretamente na sua fonte C #.
Digamos que você tenha um aplicativo WPF realmente básico, o MainWindow XAML assim,
Isso será algo como isto:
Na fonte do MainWindow XAML, você pode ter algo parecido com isto, onde tudo o que estamos fazendo é alterar o valor diretamente por meio
textBlock.Text
da funcionalidadeget
/set
:Então, quando você acionar o evento de clique clicando no botão, pronto! Kilroy aparece :)
fonte
Outra solução é criar uma classe normal que implemente o PropertyChanger assim
Em seguida, crie uma instância estática da classe em algum lugar que você não
E agora use-o como propriedade estática
E aqui está a implementação do PropertyChanger, se necessário
fonte
Resposta mais simples (.net 4.5 e posterior):
e XAML:
Não negligencie os colchetes
fonte