2012-02-23 60 views
12

WPF的新手。我有一個屏幕上的數字小鍵盤來輸入一個PIN。我想要做的是在輸入PIN的四位數字時禁用這些按鈕。我當然可以用代碼很容易地做到這一點,但在我看來,這是應該與綁定完成的事情。綁定到表達式

喜歡的東西:

<Button Style="Whatever" IsEnabled={Binding ElementName=PinBox ???}/> 

似乎沒有辦法做到這一點所以,我認爲是替代,這是一個普通的屬性上(這是誠實似乎相當原始的給我。)底層Window類。但我不知道如何綁定到它(我是否需要指定類本身作爲自己的數據上下文,還是我需要將PIN字符串提取到視圖模型?)

然後,怎麼做我得到普通屬性來更新GUI。

我想我可以定義的視圖模型類,並有一個叫做依賴屬性「ButtonsEnabled」,但它似乎有點重量級的這樣一個簡單的問題。

讓我知道如果我失去了一些東西。

+0

你可以試試[**結合您的組件(按鈕)功能**](http://social.msdn.microsoft.com/Forums/en/wpf/thread/b92178bc-bc1a-4ec0-ad94-b86bbf2ea56a) – 2012-02-23 03:47:39

回答

11

你可以寫一個轉換器根據數字在文本框中

boolean值,返回FO R按鈕的XAML是

<Button Content="Test" IsEnabled="{Binding ElementName=PinBox,Path=Text,Converter={StaticResource DigitsToBoolConverter}}" Grid.Row="1" Height="20" Width="100"></Button> 

其中PinBox是用於輸入pin的文本框名稱。

轉換器的功能是

public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
{ 
    return value.ToString().Length >= 4; 
} 
3

不,你不會遺漏任何東西,WPF開箱綁定不支持表達式。

已經有一些人實現自己的類,添加此類型的功能: http://www.11011.net/wpf-binding-expressions

不過說真的,這就是視圖模型模式是。使用它,它不重量級。

+0

鏈接不工作了。 – brainydexter 2017-08-09 18:20:58

+0

鑑於這是5歲以上,我不感到驚訝:) – Tyson 2017-08-09 22:46:29

+0

@brainydexter你可以使用wayback機? https://web.archive.org/web/20160313063004/http://www.11011.net/wpf-binding-expressions但鑑於其5歲以上,我會建議一個新的谷歌'wpf綁定包括表達'或東西像那樣。 – Tyson 2017-08-09 22:49:14

0

創建converter,將返回true或基於PinBox.Text.Length假。

那麼你的XAML將成爲:

<Button Style="Whatever" IsEnabled={Binding ElementName=PinBox, Converter={StaticResource yourConverter}}/> 
8

使用commands另一種方式:

XAML:

<Button Content="2" Style="Whatever" Command={Binding MyCommand} CommandParamater="2"/> 

視圖模型:

public ICommand MyCommand { get; private set; } 
public string PinNumber { get; private set; } 
public void Init() 
{ 
    MyCommand = new RelayCommand(
    param => AddPinNumberDigit(param), 
    param => CanAddPin); 
} 
private void AddPinNumberDigit(string digit) 
{ 
    PinNumber += digit; 
} 
public bool CanAddPin { 
    get 
    { 
    return PinNumber.Length < 3; 
    } 
} 
+0

我喜歡這個答案,並從中學到很多,但最終我實際上使用了轉換器。我希望我能接受這兩個,但我確實讓你高興。 – 2012-02-26 03:55:48