Обертывание функциональности UserControl в команду bindable
Пожалуйста, не мешайте себе делать выговор, если посчитаете вопрос слишком глупым. Услышь меня, пожалуйста:
- У меня есть пользовательский элемент управления, в котором я могу добавить столько свойств зависимостей, сколько захочу.
- Элемент управления в основном представляет собой элемент управления рендерингом данных (я назову его MyControl).
- MyControl обладает функциональностью (метод чтения), которая позволяет ему сохранять данные, которые он отображает, на диске.
Хорошо, теперь это то, что я хочу:
я хочу DependencyProperty
в MyControl
называется ExportDataProperty
это обернет эту функциональность для кнопки в xaml для привязки к ней. Вот некоторый грубый код, чтобы объяснить это:
public class MyControl:Control
{
/// <summary>
/// <see cref="DependencyProperty"/> for the command that is fired to export the data
/// </summary>
public static readonly DependencyProperty ExportDataProperty = DependencyProperty.Register("ExportData", typeof(ICommand), typeof(MyControl), new UIPropertyMetadata(null));
/// <summary>
/// Gets or sets the instance of <see cref="ICommand"/> that executes the functionality of exporting.
/// Please note that this is a synchronous call. It is advised NOT to call this for very big datasets.
/// </summary>
public ICommand ExportData
{
get { return GetValue(ExportDataProperty) as RoutedCommand; }
set { SetValue(ExportDataProperty, value); }
}
/// <summary>
/// How do I involve myself with the above command??
/// how, How, HOw, HOW??
/// </summary>
private void ExportMethod()
{
string filename = GetFilenameByMagic();
//Blah blah code to save at filename location.
}
private string GetFilenameByMagic()
{
return Magic.ReturnFilename();
}
}
Как я хочу использовать это?
<Window x:Name="AVeryBigWindow">
<Window.Resources>
<ResourceDictionary Source = "pack://application:,,,/FoolsFactory; component/Resources/FunnyColors.xaml"/>
<Window.Resources>
<StackPanel>
<Button Command={Binding ExportData ElementName=myFunnyControl} Content="Click to Export"/>
<controls:MyControl x:Name="myFunnyControl"/>
</StackPanel>
</Window >
Я не уверен, как обернуть ExportMethod
внутри команды?
У меня есть еще одно беспокойство: что если потребитель MyControl
связывает ExportDataProperty
для ICommand
подвергается ViewModel? Я не хочу, чтобы это произошло.
Я подхожу к этому неправильно? Любая помощь будет оценена.
1 ответ
Решение
Вы можете установить команду изнутри элемента управления, а затем использовать ее с помощью кнопки через привязку.
CS
public class MyControl:Control
{
...
public MyControl()
{
ExportData = new DelegateCommand(ExportMethod);
}
private void ExportMethod()
{
string filename = GetFilenameByMagic();
//Blah blah code to save at filename location.
}
...
}
XAML
<local:MyControl x:Name="myControl" />
<Button Command="{Binding ElementName=myControl, Path=ExportData" />