我建議使用轉換器。這裏是例子。假設你有一個簡單的ViewModel類:
class ViewModel
{
public string Read
{ get; set; }
public string ReadWrite
{ get; set; }
public bool IsPropertyReadOnly(string propertyName)
{
return propertyName != "ReadWrite";
}
}
解決你的問題,你需要寫一個轉換器,如:
public class Converter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var vm = value as ViewModel;
var functionName = (string)parameter;
var result = vm.IsPropertyReadOnly(functionName);
return result;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException("This method should never be called");
}
}
而這一切;現在你可以在XAML中使用該轉換器,如:
<Window.Resources>
<temp:Converter x:Key="ReadOnlyMethodConverter"/>
</Window.Resources>
<StackPanel>
<TextBox Text="{Binding Read, Mode=TwoWay}"
IsReadOnly="{Binding Path=.,
Converter={StaticResource ReadOnlyMethodConverter}, ConverterParameter=Read}"
/>
<TextBox Text="{Binding ReadWrite, Mode=TwoWay}"
IsReadOnly="{Binding Path=.,
Converter={StaticResource ReadOnlyMethodConverter}, ConverterParameter=ReadWrite}"
/>
</StackPanel>
而在後臺代碼,我們只需要創建視圖模型,並設置爲的DataContext:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = new ViewModel();
}
}
這裏可能是你的問題的答案(使用轉換器的最後一個答案):[?綁定到WPF的方法] (http://stackoverflow.com/questions/ 502250 /綁定到一個法功能於WPF) – 2012-02-04 21:25:18