Тема: Refresh win form WPF
Є вюшка, в якій створюються динамічно елементи, потрібно по натиснені кнопки, рефрешнути вюшку, щоб зникли динамічно створені елементи.
Наперед дякую за допомогу.
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → C#, .NET → Refresh win form WPF
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися
Є вюшка, в якій створюються динамічно елементи, потрібно по натиснені кнопки, рефрешнути вюшку, щоб зникли динамічно створені елементи.
Наперед дякую за допомогу.
Якщо можете додайте солюшин, без нього важко щось сказати.
namespace Elast.Client.Views.StoreTypeViews
{
internal sealed class StoreWareViewModel : BaseViewModel
{
#region Fields
private readonly IFactoryRepository _factoryRepository;
private readonly IBoxRepository _boxRepository;
private readonly IProductModelRepository _productModelRepository;
private IFactoryTypeRepository _typeRepository;
private FactoryType _selectedFactoryType;
private Factory _selectedFactory;
private Factory _selectedFactoryForEditProductModel;
private string _nameProductModel;
private string _articleProductModel;
private List<FactoryType> _factoryTypeList;
private float _boxCountProductModel;
private float _countProductModel;
private float _totalCountProductModel;
#endregion
#region Commands
public RelayCommand AddProductModel { get; set; }
//public RelayCommand EditProductModel { get; set; }
//public RelayCommand<ProductModel> DeleteProductModel { get; set; }
#endregion
#region Properties
public List<Factory> AllFactories { get; set; }
public List<FactoryType> FactoryTypesList
{
get { return _factoryTypeList; }
set
{
_factoryTypeList = value;
OnPropertyChanged(() => FactoryTypeList);
}
}
private ObservableCollection<ProductModel> _productModelsByFactory;
public ObservableCollection<ProductModel> ProductModelsByFactory
{
get { return _productModelsByFactory; }
set
{
_productModelsByFactory = value;
OnPropertyChanged(() => ProductModelsByFactory);
}
}
public Factory SelectedFactory
{
get { return _selectedFactory; }
set
{
_selectedFactory = value;
if (value != null)
{
FactoryTypeList = _typeRepository.GetByFactoryId(value.FactoryId);
SelectedFactoryType = FactoryTypeList.FirstOrDefault();
}
OnPropertyChanged(() => SelectedFactory);
}
}
public FactoryType SelectedFactoryType
{
get { return _selectedFactoryType; }
set
{
_selectedFactoryType = value;
OnPropertyChanged(() => SelectedFactoryType);
AddProductModel.OnCanExecuteChanged();
}
}
public List<FactoryType> FactoryTypeList
{
get { return _factoryTypeList; }
set
{
_factoryTypeList = value;
OnPropertyChanged(() => FactoryTypeList);
}
}
public string ArticleProductModel
{
get { return _articleProductModel; }
set
{
_articleProductModel = value;
AddProductModel.OnCanExecuteChanged();
OnPropertyChanged(() => ArticleProductModel);
}
}
public float BoxCountProductModel
{
get { return _boxCountProductModel; }
set
{
_boxCountProductModel = value;
AddProductModel.OnCanExecuteChanged();
OnPropertyChanged(() => BoxCountProductModel);
}
}
public float CountProductModel
{
get { return _countProductModel; }
set
{
_countProductModel = value;
AddProductModel.OnCanExecuteChanged();
OnPropertyChanged(() => CountProductModel);
}
}
#endregion
public Func<List<Box>> GetDynamicBoxParams { get; set; }
/// <summary>
/// ctor.
/// </summary>
public StoreWareViewModel()
{
AddProductModel = new RelayCommand(
() => true,
() =>
{
var productBoxParams = GetDynamicBoxParams.Invoke();
var newProductModel = new ProductModel()
{
FactoryId = SelectedFactory.FactoryId,
FactoryTypeId = SelectedFactoryType.FactoryTypeId,
Article = ArticleProductModel,
CreatedOn = DateTime.Now,
};
_productModelRepository.AddProductModel(newProductModel);
productBoxParams.ForEach(x => x.ProductModelId = newProductModel.ProductModelId);
_boxRepository.AddBoxes(productBoxParams);
ArticleProductModel = string.Empty;
// >>RefreshView<<
});
_boxRepository = new BoxReposirory();
_factoryRepository = new FactoryRepository();
_productModelRepository = new ProductModelRepository();
_typeRepository = new FactoryTypeRepository();
AllFactories = new List<Factory>(GetAllFactories());
SelectedFactory = AllFactories.FirstOrDefault();
}
private IEnumerable<Factory> GetAllFactories()
{
return _factoryRepository.GetAllFactories();
}
}
}
код біхаєнд:
namespace Elast.Client.Views.StoreTypeViews
{
/// <summary>
/// Interaction logic for StoreTypeWareView.xaml
/// </summary>
public partial class StoreTypeWareView : IView
{
private StoreWareViewModel _viewModel;
private readonly List<Box> _productDynamicParamses;
public StoreTypeWareView()
{
InitializeComponent();
_productDynamicParamses = new List<Box>();
}
public string ViewName
{
get { return ViewNames.StoreWare; }
}
public void InitView()
{
DataContext = _viewModel = new StoreWareViewModel();
AddNumeric();
_viewModel.GetDynamicBoxParams = () =>
{
Box productDynamicParams = null;
foreach (var control in LayoutGrid.Children.Cast<UIElement>()
.Where(x => x is RadNumericUpDown))
{
if ((control as RadNumericUpDown).Name.Equals("boxCount"))
{
productDynamicParams = new Box
{
BoxCount = (int) (control as RadNumericUpDown).Value.Value
};
}
else
{
productDynamicParams.BoxSize = (int)((RadNumericUpDown) control).Value.Value;
productDynamicParams.ResidueInBox = productDynamicParams.BoxSize;
_productDynamicParamses.Add(productDynamicParams);
}
}
return _productDynamicParamses;
};
}
private void Add_Click(object sender, System.Windows.RoutedEventArgs e)
{
AddNumeric();
}
private int _setRow = 1;
void countInBox_ValueChanged(object sender, RadRangeBaseValueChangedEventArgs e)
{
CalculateTotal();
}
void boxCount_ValueChanged(object sender, RadRangeBaseValueChangedEventArgs e)
{
CalculateTotal();
}
private void CalculateTotal()
{
double boxCount = default(double);
double totalCount = default(double);
foreach (var control in LayoutGrid.Children.Cast<UIElement>()
.Where(x => x is RadNumericUpDown))
{
if ((control as RadNumericUpDown).Name.Equals("boxCount"))
{
boxCount = ((RadNumericUpDown)control).Value.Value;
}
else
{
totalCount += boxCount * ((RadNumericUpDown)control).Value.Value;
boxCount = default(double);
}
}
Total.Text = totalCount.ToString();
}
private void AddNumeric()
{
RadNumericUpDown boxCount = new RadNumericUpDown
{
Height = 35,
Minimum = 1,
Name = "boxCount",
Width = 130,
Margin = new Thickness(7),
HorizontalAlignment = HorizontalAlignment.Left,
VerticalAlignment = VerticalAlignment.Center,
FontFamily = new FontFamily("/Elast.Client;component/AppResources/Fonts/#Segoe UI Light"),
FontSize = 14
};
boxCount.ValueChanged += boxCount_ValueChanged;
RadNumericUpDown countInBox = new RadNumericUpDown
{
Height = 35,
Minimum = 1,
Width = 130,
Name = "countInBox",
Margin = new Thickness(7),
HorizontalAlignment = HorizontalAlignment.Left,
VerticalAlignment = VerticalAlignment.Center,
FontFamily = new FontFamily("/Elast.Client;component/AppResources/Fonts/#Segoe UI Light"),
FontSize = 14
};
countInBox.ValueChanged += countInBox_ValueChanged;
int gridRowsCount = LayoutGrid.RowDefinitions.Count;
if (gridRowsCount >= 5)
{
AddButton.IsEnabled = false;
}
LayoutGrid.AddControlToGrid(boxCount, 3, _setRow);
LayoutGrid.AddControlToGrid(countInBox, 4, _setRow);
_setRow++;
}
}
}
ну і сама вюшка:
<UserControl x:Class="Elast.Client.Views.StoreTypeViews.StoreTypeWareView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
HorizontalAlignment="Center"
VerticalAlignment="Top">
<UserControl.Resources>
<ControlTemplate x:Key="deleteButtonTemplate">
<Image Margin="0,0,0,0" Source="../../Image/deleteProduct.png" />
</ControlTemplate>
<ControlTemplate x:Key="addButtonTemplate">
<Image Margin="0" Source="../../Image/plus.png"/>
</ControlTemplate>
<DataTemplate x:Key="ProductModelListViewItemTemplate">
<StackPanel Margin="5,3,0,3"
VerticalAlignment="Center"
Focusable="True"
Orientation="Horizontal">
<telerik:RadButton Command="{Binding RelativeSource={RelativeSource AncestorType=UserControl},
Path=DataContext.DeleteProductModel}"
CommandParameter="{Binding}"
Template="{StaticResource deleteButtonTemplate}" />
<TextBlock Margin="5,0,0,0"
FontFamily="/Elast.Client;component/AppResources/Fonts/#Segoe UI Light"
FontSize="24"
Text="{Binding Name}" />
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="FactoryListBoxItemTemplate">
<StackPanel>
<TextBlock FontFamily="/Elast.Client;component/AppResources/Fonts/#Segoe UI Light"
FontSize="24"
Foreground="Black"
Text="{Binding FactoryName}" />
</StackPanel>
</DataTemplate>
</UserControl.Resources>
<Grid x:Name="LayoutGrid">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="150" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Margin="7"
FontFamily="/Elast.Client;component/AppResources/Fonts/#Segoe UI Light"
FontSize="20"
Foreground="White"
Text="Фабрикa"
TextWrapping="Wrap" />
<telerik:RadComboBox Grid.Row="1"
Width="185"
Height="35"
Margin="14,9,0,10"
FontSize="20"
HorizontalAlignment="Left"
ItemTemplate="{StaticResource FactoryListBoxItemTemplate}"
ItemsSource="{Binding AllFactories}"
SelectedItem="{Binding SelectedFactory,
Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Grid.Column="1" Grid.Row="0" Margin="7"
FontFamily="/Elast.Client;component/AppResources/Fonts/#Segoe UI Light"
FontSize="20"
Foreground="White"
Text="Тип"
TextWrapping="Wrap" />
<telerik:RadComboBox Grid.Row="1"
Grid.Column="1"
Width="185"
Height="35"
Margin="7"
FontSize="20"
HorizontalAlignment="Left"
FontFamily="/Elast.Client;component/AppResources/Fonts/#Segoe UI Light"
ItemsSource="{Binding FactoryTypeList}"
SelectedItem="{Binding SelectedFactoryType,
Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}"
DisplayMemberPath="FactoryTypeName"/>
<TextBlock Margin="7"
Grid.Row="0"
Grid.Column="2"
VerticalAlignment="Center"
FontFamily="/Elast.Client;component/AppResources/Fonts/#Segoe UI Light"
FontSize="20"
Foreground="White"
Text="Артикул" />
<TextBox Width="130"
Height="36"
Margin="4,9,10,9"
Grid.Column="2"
Name="Article"
Grid.Row="1"
VerticalAlignment="Center"
FontFamily="/Elast.Client;component/AppResources/Fonts/#Segoe UI Light"
FontSize="20"
Text="{Binding ArticleProductModel}" />
<TextBlock Margin="7"
Grid.Column="3"
Grid.Row="0"
VerticalAlignment="Center"
FontFamily="/Elast.Client;component/AppResources/Fonts/#Segoe UI Light"
FontSize="20"
Foreground="White"
Text="Ящики" />
<TextBlock Margin="7"
Grid.Column="4"
Grid.Row="0"
VerticalAlignment="Top"
FontFamily="/Elast.Client;component/AppResources/Fonts/#Segoe UI Light"
FontSize="20"
Foreground="White"
Text="Кол-во в ящике" />
<!--<telerik:RadNumericUpDown Grid.Row="1"
Height="35"
Width="130"
Minimum="1"
Name="countInBox"
Margin="7"
Grid.Column="4"
HorizontalAlignment="Left"
FontFamily="/Elast.Client;component/AppResources/Fonts/#Segoe UI Light"
FontSize="14"
Value="{Binding CountProductModel,
Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}" />-->
<TextBlock Margin="7"
Grid.Row="0"
Grid.Column="5"
VerticalAlignment="Top"
FontFamily="/Elast.Client;component/AppResources/Fonts/#Segoe UI Light"
FontSize="20"
Foreground="White"
Text="Кол-во штук" />
<TextBlock Name="Total"
Grid.Row="1"
HorizontalAlignment="Center"
Foreground="White"
Width="50"
Grid.Column="5"
Height="40"
Margin="7"
FontFamily="/Elast.Client;component/AppResources/Fonts/#Segoe UI Light"
FontSize="24"/>
<telerik:RadButton Name="AddModelRadButton"
Width="100"
Height="35"
Grid.Row="1"
Grid.Column="6"
Margin="7,7,7,10"
VerticalAlignment="Bottom"
HorizontalAlignment="Left"
Command="{Binding AddProductModel}"
Content="Добавить"
FontSize="16" />
<telerik:RadButton Name="AddButton"
Grid.Column="1"
Grid.Row="2"
Click="Add_Click"
HorizontalAlignment="Right"
Margin="7,17,7,7"
Width="25"
Height="25"
Template="{StaticResource addButtonTemplate}"/>
</Grid>
</UserControl>
Hanter: код слід брати у теги code, також великий об`єм коду, слід поміщати у тег spoiler
ні, я не зміг це запустити, там дуже багато звязків пропущені. а так як досвіду в впф в мене дуже мало я не зміг то все якось замокати. Доречі поставив телерік щось там - студія начала тупити ппц як, хоча це можливо тільки перший раз після установки.
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися