Я часто сталкиваюсь со многими проблемами, которые приводят к рефакторингу моего кода ...
Вот почему я хочу попросить некоторые рекомендации.
Проблемы, с которыми я сталкиваюсь:
1) Предоставление данных в XAML
Предоставление простых данных для управления значением вместо использования преобразователя значений. Например, у меня есть цветовая строка типа «# FF234243», которая хранится в классе. Значение строки предоставляется веб-приложением, поэтому я могу указать его только во время выполнения.
2) Интерфейс для каждого разрешения
В начале моего обучения мне сказали, что вы можете создать пользовательский интерфейс для каждого возможного разрешения, что глупо.
Итак, я написал ValueConverter, который я связываю с элементом, и в качестве ConverterParameter я даю значение типа «300», которое вычисляется для каждого возможного разрешения ... Но это приводит к коду, подобному этому ...
<TextBlock
Height={Binding Converter={StaticResource SizeValue}, ConverterParameter='300'}
/>
3) DependencyProperties против NotifyProperties (свойства, которые реализуют INotifyPropertyChanged) против свойств
Я написал элемент управления, который принимает список значений и преобразует их в кнопки , которые можно активировать в пользовательском интерфейсе. Поэтому я сделал это так, я создал переменную, которую я установил как DataContext для этого конкретного Control , и проверил мои данные с помощью DataContextChanged , но мой коллега упомянул, что для этого Причина ЗависимостьСвойства , если введено. Таким образом, я создал DependecyProperty , который принимает список элементов НО , когда свойство получает значение, я должен отобразить кнопки ... Поэтому мне нужно будет сделать что-то вроде
public List<string> Buttons
{
get { return (List<string>)GetValue(ButtonsProperty); }
set
{
SetValue(ButtonsProperty, value);
RenderButtons();
}
}
// Using a DependencyProperty as the backing store for Buttons. This enables animation, styling, binding, etc...
public static readonly DependencyProperty ButtonsProperty =
DependencyProperty.Register("Buttons", typeof(List<string>), typeof(MainPage), new PropertyMetadata(""));
private void RenderButtons()
{
ButtonBar.Children.Clear();
ButtonBar.ColumnDefinitions.Clear();
if(Buttons != null)
{
int added = 0;
foreach (var item in Buttons)
{
var cd = new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Star) };
var btn = new Button() { Content = item };
ButtonBar.ColumnDefinitions.Add(cd);
ButtonBar.Children.Add(btn);
Grid.SetColumn(btn, added);
}
}
}
И использовать его так:
<Controls:MyControl
x:Name="ButtonBar" Button="{Binding MyButtons}">
</Controls:MyControl>
Поскольку это много тем, я мог бы их разделить, но я думаю, что это довольно распространенная тема для начинающих, и я не нашел объяснения или чего-то еще