Tôi đang gặp sự cố khi databinding thuộc tính TextBox.Text
đến phương thức của đối tượng. Ý tưởng này cho phép người dùng viết một tên tệp TextBox
và sau đó có một phần mở rộng của tệp là TextBlock
.Databinding vào một phương pháp trong WPF
class GetFileInfo
{
public string GetFileExtension(string fileName)
{
return Path.GetExtension(fileName);
}
}
Đây là XAML của tôi:
<Window.Resources>
<ObjectDataProvider x:Key="getFileInfo" MethodName="GetFileExtension" ObjectType="{x:Type local:GetFileInfo}">
<ObjectDataProvider.MethodParameters>
<sys:String>abc.text</sys:String>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</Window.Resources>
<StackPanel>
<TextBox Name="textBox1">
<TextBox.Text>
<Binding Source="{StaticResource getFileInfo}" Path="MethodParameters[0]" BindsDirectlyToSource="True" UpdateSourceTrigger="PropertyChanged" />
</TextBox.Text>
</TextBox>
<TextBlock Name="textBlock1" Text="{Binding Source={StaticResource getFileInfo}}"/>
</StackPanel>
Đối với một số lý do nó không được làm bất cứ điều gì. Anyknow có thể chỉ ra những gì có thể là lý do? Đây là những gì tôi nhìn thấy trên các thiết kế và khi tôi chạy các ứng dụng:
alt text http://img64.imageshack.us/img64/6922/f0rki14feo3oa3groxm5kgm.png
Và đây là những gì sẽ xảy ra khi tôi cố gắng thiết lập văn bản khác tại thời gian chạy:
alt text http://img684.imageshack.us/img684/1057/b52pnq1dm4i23qivizvpaqq.png Đây là lỗi do trình gỡ lỗi đưa ra khi cố gắng đặt văn bản khác tại thời gian chạy:
System.Windows.Data Error: 8 : Cannot save value from target back to source. BindingExpression:Path=MethodParameters[0]; DataItem='ObjectDataProvider' (HashCode=2207369); target element is 'TextBox' (Name='textBox1'); target property is 'Text' (type 'String') ArgumentException:'System.ArgumentException: Object of type 'MS.Internal.Data.PropertyPathWorker+IListIndexerArg' cannot be converted to type 'System.Int32'. at System.RuntimeType.TryChangeType(Object value, Binder binder, CultureInfo culture, Boolean needsSpecialCast) at System.RuntimeType.CheckValue(Object value, Binder binder, CultureInfo culture, BindingFlags invokeAttr) at System.Reflection.MethodBase.CheckArguments(Object[] parameters, Binder binder, BindingFlags invokeAttr, CultureInfo culture, Signature sig) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) at System.Reflection.RuntimePropertyInfo.SetValue(Object obj, Object value, BindingFlags invokeAttr, Binder binder, Object[] index, CultureInfo culture) at MS.Internal.Data.PropertyPathWorker.SetValue(Object item, Object value) at MS.Internal.Data.ClrBindingWorker.UpdateValue(Object value) at System.Windows.Data.BindingExpression.UpdateSource(Object value)'
Bạn phải thay đổi ý tưởng từ ràng buộc Phương pháp thành thuộc tính. và tìm hiểu khái niệm về INotifyPropertyChanged & DataContext. Google một số mẫu MVVM quá. –
+1 để đặt câu hỏi sẽ giúp nhiều người không hiểu dữ liệu. –