Ответы пользователя по тегу WPF
  • Как сделать привязку в WPF MVVM к динамическому списку CheckBox?

    phoenixbk
    @phoenixbk
    Можно примерно так сделать:
    public class HobbyCheckBoxItem
    {
    	private readonly User _user;
    
    	public HobbyCheckBoxItem(User user, Hobby hobby)
    	{
    		_user = user;
    		Hobby = hobby;
    		_isChecked = user.Hobbies.Contains(hobby);
    	}
    
    	public Hobby Hobby { get; }
    
    	private bool _isChecked;
    
    	public bool IsChecked
    	{
    		get => _isChecked;
    		set
    		{
    			if (_isChecked == value) return;
    			_isChecked = value;
    			if (value) _user.Hobbies.Add(Hobby);
    			else _user.Hobbies.Remove(Hobby);
    			// save db
    		}
    	}
    }

    И в биндинге CheckBox тогда будет не Content="{Binding Name}", а Content="{Binding Hobby.NameFull}"
    Ответ написан
    Комментировать
  • Как передать в шаблон стиля DataContext?

    phoenixbk
    @phoenixbk
    Создаём стиль:
    <Style x:Key="TestButtonStyle" TargetType="Button">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate>
                    <TextBlock Text="{Binding}"/>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    Применяем стиль:
    <Button DataContext="Some text" Style="{StaticResource TestButtonStyle}" />
    Ответ написан
    Комментировать
  • Не корректное отображение кнопки WPF?

    phoenixbk
    @phoenixbk
    Вы указали большие отступы справа и снизу. В результате из-за них размер кнопки может быть меньше, чем вы указали (в зависимости от размера родителя, в данном случае окна). Вы можете выставить отступы справа и снизу в 0 и указать горизонтальное выравнивание слева и вертикальное сверху:
    <Button x:Name="btn" Content="Нажать!!!" Width="150" Height="45" Margin="45,49,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Click="btn_Click"/>
    Ответ написан
    Комментировать
  • Как быть с PasswordBox в WPF?

    phoenixbk
    @phoenixbk
    Я использовал данный код - https://github.com/grumpydev/hotwire/blob/master/H....
    Пример использования:
    <PasswordBox
        uiHelpers:PasswordBoxAssistant.BindPassword="True"
        uiHelpers:PasswordBoxAssistant.BoundPassword="{Binding ServerPassword, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
    Ответ написан
    Комментировать
  • Как создать фильтрацию в привязанной коллекции в WPF?

    phoenixbk
    @phoenixbk
    Есть ещё вариант использовать CollectionViewSource:
    CollectionViewSource _viewSource = new CollectionViewSource();
    _viewSource.Source = _items;
    _viewSource.Filter += (s, e) =>
                  {
                      SomeItem item = e.Item as SomeItem;
                      bool accepted;
                      //проверяем наши условия. true - объект отобразится, false - не отобразится
                      e.Accepted = accepted;
                  };

    Чтобы обновить список элементов используем:
    _viewSource.View.Refresh();
    После этого для каждого элемента из _items вызовется событие Filter.
    Соответственно в ComboBox.ItemsSource биндим _viewSource.View. Таким образом в ComboBox не придется каждый раз вручную вставлять новую коллекцию.
    Ответ написан
    Комментировать